????????ES作為一款搜索引擎框架,文本搜索是其核心功能。ES在文本索引的建立和搜索過程中依賴兩大組件,即Lucene和分析器。其中,Lucene負(fù)責(zé)進(jìn)行倒排索引的物理構(gòu)建,分析器負(fù)責(zé)在建立倒排索引前和搜索前對文本進(jìn)行分詞和語法處理。
文本的索引建立過程
????????為了完成對文本的快速搜索,ES使用了一種稱為“倒排索引”的數(shù)據(jù)結(jié)構(gòu)。倒排索引中的所有詞語存儲在詞典中,每個(gè)詞語又指向包含它的文檔信息列表。
假設(shè)需要對下面兩個(gè)旅館的信息進(jìn)行倒排索引的創(chuàng)建:
- 文檔ID為001,旅館名稱為“北京嘉怡假日旅館”;
- 文檔ID為002,旅館名稱為“北京欣欣旅館”。
首先,ES將文檔交給分析器進(jìn)行處理,處理的過程包括字符過濾、分詞和分詞過濾,最終的處理結(jié)果是文檔內(nèi)容被表示為一系列關(guān)鍵詞信息的集合。這里的關(guān)鍵詞信息指的是關(guān)鍵詞本身以及它在文檔中出現(xiàn)的位置信息和詞性信息,下圖所示為文檔001的分析結(jié)果示意圖。
?其次,ES根據(jù)分析結(jié)果建立文檔-詞語矩陣,用以表示詞語和文檔的包含關(guān)系,本例中的文檔-詞語矩陣如下表所示:
北京 | 嘉怡 | 假日 | 欣欣 | 旅館 | |
001 | 1 | 1 | 1 | 0 | 1 |
002 | 1 | 0 | 0 | 1 | 1 |
通過上面的文檔-詞語矩陣可知,ES從文檔001中提取出4個(gè)詞語,從文檔002中提取出3個(gè)詞語。
????????文檔-詞語矩陣建立完成之后,接著需要建立基于詞語的倒排索引。ES會遍歷文檔詞語矩陣中的每一個(gè)詞語,然后將包含該詞語的文檔信息與該詞語建立一種映射關(guān)系。映射關(guān)系中的詞語集合叫作Term Dictionary,即“詞典” .
????????映射中的文檔集合信息不僅包含文檔ID,還包含詞語在文檔中的位置和詞頻信息,包含這些文檔信息的結(jié)構(gòu)叫作Posting List。
????????對于一個(gè)規(guī)模很大的文檔集合來說,可能包含幾十萬甚至上百萬的詞語集合,能否快速定位某個(gè)詞語,直接影響搜索時(shí)的響應(yīng)速度。
????????因此需要一種高效的數(shù)據(jù)結(jié)構(gòu)對映射關(guān)系中的詞語集合進(jìn)行索引,這種結(jié)構(gòu)叫作Term Index。上述3種結(jié)構(gòu)結(jié)合在一起就構(gòu)成了ES的倒排索引結(jié)構(gòu),倒排索引與三者之間的邏輯關(guān)系如下圖所示:
?本例中的倒排索引結(jié)構(gòu)如下圖所示:
?文本的搜索過程
在ES中,一般使用match查詢對文本字段進(jìn)行搜索。match查詢過程一般分為如下幾步:
- ES將查詢的字符串傳入對應(yīng)的分析器中,分析器的主要作用是對查詢文本進(jìn)行分詞,并把分詞后的每個(gè)詞語變換為對應(yīng)的底層lucene term查詢。
- ES用term查詢在倒排索引中查找每個(gè)term,然后獲取一組包含該term的文檔集合。
- ES根據(jù)文本相關(guān)度對每個(gè)文檔進(jìn)行打分計(jì)算,打分完畢后,ES把文檔按照相關(guān)性進(jìn)行倒序排序。
- ES根據(jù)得分高低返回匹配的文檔。
比如以下對旅館索引中搜索“金都嘉怡”的查詢?nèi)缦拢?/p>
文章來源:http://www.zghlxwxcb.cn/news/detail-465930.html
?ES分析器先將查詢詞切分為“金都”和“嘉怡”,然后分別到倒排索引里查找兩個(gè)詞對應(yīng)的文檔列表并獲得了文檔001和002,然后根據(jù)相關(guān)性算法計(jì)算文檔得分并進(jìn)行排序,最后將文檔集合返回給客戶端。文章來源地址http://www.zghlxwxcb.cn/news/detail-465930.html
到了這里,關(guān)于Elasticsearch之文本搜索(十三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!