正常的索引一般是指關系型數據庫里的索引。 把不同的數據存放到不同的字段中。如果要實現baidu或google那種搜索,就需要與一條記錄的多個字段進行比對,需要 全表掃描,如果數據量比較大的話,性能就很低。
那反過來,如果把mysql中存放在不同字段中字符串,按一定規則拆分成term【詞】存放到 一個字段中【套用mysql中的表結構,實際上不是這樣處理的】,然后把這些詞存放到一個字段中,並在這個字段建立索引。
這樣一來,搜索時,只需要查 帶有索引的這列就可以了【這一點和關系型數據庫 field_name='xxx'一樣了】,這一步解決了效率問題
這個term對應所在記錄,中這個term所在的原始記錄,這一步解決了獲取源內容的問題
正排索引(forward index)與倒排索引(inverted index)
正排索引(前向索引) 正排索引也稱為"前向索引"。
正向索引的結構如下:
“文檔1”的ID > 單詞1:出現次數,出現位置列表;單詞2:出現次數,出現位置列表;…………。
“文檔2”的ID > 此文檔出現的關鍵詞列表。
一般是通過key,去找value。
當用戶在主頁上搜索關鍵詞“華為手機”時,假設只存在正向索引(forward index),那么就需要掃描索引庫中的所有文檔,找出所有包含關鍵詞“華為手機”的文檔,再根據打分模型進行打分,排出名次后呈現給用戶。因為互聯網上收錄在搜索引擎中的文檔的數目是個天文數字,這樣的索引結構根本無法滿足實時返回排名結果的要求。
所以,搜索引擎會將正向索引重新構建為倒排索引,即把文件ID對應到關鍵詞的映射轉換為關鍵詞到文件ID的映射,每個關鍵詞都對應着一系列的文件,這些文件中都出現這個關鍵詞。
得到倒排索引的結構如下:
“關鍵詞1”:“文檔1”的ID,“文檔2”的ID,…………。
“關鍵詞2”:帶有此關鍵詞的文檔ID列表。
從詞的關鍵字,去找文檔。
官網
https://www.elastic.co/guide/en/elasticsearch/reference/5.x/analysis.html
官網,提供了很多很多。大家自行去看!
索引分析模塊Analyzer
分解器Tokenizer
詞元過濾器token filters
經過 Tokenizer
Elasticsearch之IKAnalyzer的過濾停止詞
大家,有興趣,可以看看,英文停用詞
http://www.ranks.nl/stopwords
大家,有興趣,可以看看,中文停用詞
Elasticsearch之中文分詞器
Elasticsearch之幾個重要的分詞器
作者:大數據和人工智能躺過的坑
出處:http://www.cnblogs.com/zlslch/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利。 如果您認為這篇文章還不錯或者有所收獲,您可以通過右邊的“打賞”功能 打賞我一杯咖啡【物質支持】,也可以點擊右下角的【好文要頂】按鈕【精神支持】,因為這兩種支持都是我繼續寫作,分享的最大動力!