關鍵詞有兩種獲取方式,1。根據空格分隔得到所有字符。2.過濾文檔中無意義的詞,得到關鍵詞。此外,單詞的時態、大小寫、同義詞、標點符號都會得到相應的處理,不同的分詞器在索引文檔時做不同的操作。
例1:湯姆住在張掖,我也住在張掖。
關鍵詞:1:[湯姆][住][在][張掖][我][住][張掖]
他曾經住在上海
關鍵詞二:[他][現場][上海]
根據關鍵詞可以確定關鍵詞所在的文章編號,關鍵詞在文章中出現的頻率以及關鍵詞在文章中出現的位置(根據上面得到的關鍵詞可以知道,索引的時候,要麽是所有的字符,要麽是關鍵詞都被索引,lucene采用的是關鍵詞索引的方式,會節省很多空間)。具體指標如下:
1)字典文件:每個關鍵字,指向頻率文件和位置文件的指針,以及filed(用於表示信息位置,每個關鍵字有壹個或多個字段)信息。
2)頻率文件:每個文件中關鍵字出現頻率的文件。
3)位置文件:關鍵詞所在的文章中的位置文件。
關鍵詞壓縮為;比如“我愛妳中國”=“另外,數字的壓縮只記錄與前壹個數字的區別,比如,當前文章號是11890,前壹個文章號是11870。壓縮後只需要誤差20,大大減少了存儲空間。
es查詢操作使用倒排索引,數據聚集和排序需要使用正排索引。這裏我們引入正交索引。
正交索引是指對文檔中每個字段的值進行排序,實際上就是文檔值。例如:
示例:
Doc1: { "姓名":"張三","年齡":27,"性別":"男" }
Doc2: {“姓名”:“李四”,“年齡”:30,“性別”:“女”}
正交索引:
文件名稱年齡性別
Doc1插孔27公
醫生2湯姆30歲女性
正交索引的使用場景有排序、聚合、過濾等。
註意:
要聚合分段字段,需要將fielddata設置為true,否則將提示您打開fielddata並將正交索引加載到內存中,但會出現錯誤。
Doc值保存在磁盤上。此時如果內存足夠,os會自動緩存在內存中,性能依然會很高。如果沒有足夠的內存,操作系統會將其寫入磁盤。
倒排索引和正排索引的介紹到此結束。如果有幫助,請關註!謝謝妳