當前位置:編程學習大全網 - 源碼下載 - ES 索引解析(倒排索引

ES 索引解析(倒排索引

何為倒排索引?首先要了解索引表:由關鍵詞為key,關鍵詞位置屬性為value組成的壹張表。由於該表不是由key來確定value值,而是由value的屬性值來確定key的位置,所以稱為倒排索引,帶有倒排索引的文件稱為倒排文件。通俗的講倒排索引就好比書的目錄,通過目錄咱們可以準確的找到相應的數據。下面對lucene倒排索引的結構與算法進行介紹。

對於獲取關鍵詞有兩種思路,1.根據空格分隔獲取所有的字符2.過濾文檔中沒有意義的詞,獲取其中的關鍵詞。除此以上還會對詞的時態,大小寫,同義詞,標點符號等做相應的處理,不同的分詞器對文檔索引的時候做的操作有所差異。

實例1:Tom lives in Zhangye,I live in Zhangye too.

關鍵詞1:[tom][live][in][zhangye][i][live][zhangye]

實例2:He once lived in Shanghai

關鍵詞2:[he][live][shanghai]

根據關鍵詞我們就可以確定關鍵詞所在的文章號,關鍵詞在文章中出現的頻次以及該關鍵詞在文章中出現的位置(根據上面獲取關鍵詞我們可以知道,索引的時候要麽索引所有字符,要麽索引關鍵詞,lucene采取的就是索引關鍵詞的方式,這樣會節省大量的空間),具體索引如下表:

1)詞典文件:每個關鍵詞以及指向頻率文件和位置文件的指針和filed(用於表達信息位置,每個關鍵詞都有壹個或多個field)信息

2)頻率文件:關鍵詞在每個文件中出現頻率的文件

3)位置文件:關鍵詞所在文章中的位置文件

關鍵詞壓縮為<前綴長度,後綴>,例如:“我愛妳中國”=》<3,中國>,另外對數字的壓縮,只記錄與上壹個數字的差值,比如當前文章號是11890,上壹個文章號是11870,壓縮後只需要報錯20,這樣就極大的縮小了存儲空間。

倒排索引服務於es查詢操作,對數據的聚合,排序則需要使用正排索引,下面我們介紹正排索引。

正排索引說白了就是document每個field的值的排序,其實就是doc values,舉例說明:

實例:

doc1: { "name": "張三", "age": 27,"sex":"男" }

doc2: { "name": "李四", "age": 30,"sex":“女” }

正排索引:

document name age sex

doc1 jack 27 男

doc2 tom 30 女

正排索引使用場景是排序,聚合,過濾等

註意:

對於分詞的field進行聚合(aggregation)操作,需要將fielddata設置為true,否則會報錯提示妳打開fielddata、將正排索引加載到內存中

doc values是被保存在磁盤上的,此時如果內存足夠,os會自動將其緩存在內存中,性能還是會很高;如果內存不足夠,os會將其寫入磁盤上。

到此對倒排索引與正排索引就介紹完畢了,如有幫助,請關註!謝謝!

  • 上一篇: 正排索引)
  • 下一篇:KDJ指標的背離問題
  • copyright 2024編程學習大全網