正排索引(forward index)與倒排索引(inverted index)


正常的索引一般是指關系型數據庫里的索引。 把不同的數據存放到不同的字段中。如果要實現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之幾個重要的分詞器

 

更詳細,請見

Elasticsearch之中文分詞器插件es-ik(博主推薦)

 

作者:大數據和人工智能躺過的坑
出處:http://www.cnblogs.com/zlslch/

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利。 如果您認為這篇文章還不錯或者有所收獲,您可以通過右邊的“打賞”功能 打賞我一杯咖啡【物質支持】,也可以點擊右下角的【好文要頂】按鈕【精神支持】,因為這兩種支持都是我繼續寫作,分享的最大動力!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM