2019-08-08

定義

Lucene是一個成熟的、高性能的、可擴(kuò)展的、輕量級的,而且功能強(qiáng)大的搜索引擎包。Lucene的核心jar包只有一個文件,而且不依賴任何第三方j(luò)ar包。更重要的是,它提供的索引數(shù)據(jù)和檢索數(shù)據(jù)的功能開箱即用。當(dāng)然,Lucene也提供了多語言支持,具有拼寫檢查、高亮等功能。

?架構(gòu) 術(shù)語? Lucene中的術(shù)語和 < 存儲

Apache Lucene把所有的信息都寫入到一個稱為倒排索引的數(shù)據(jù)結(jié)構(gòu)中,倒排索引的介紹可以參考 < 數(shù)據(jù)分析

學(xué)習(xí)ES初期,我經(jīng)??紤]的問題是,傳入到Document中的數(shù)據(jù)是如何轉(zhuǎn)變成倒排索引的?查詢語句是如何轉(zhuǎn)換成一個個Term使高效率文本搜索變得可行?這種轉(zhuǎn)換數(shù)據(jù)的過程就稱為文本分析(analysis)

文本分析工作由analyzer組件負(fù)責(zé)。analyzer由一個分詞器(tokenizer)和0個或者多個過濾器(filter)組成,也可能會有0個或者多個字符映射器(character mappers)組成。

Lucene中的tokenizer用來把文本拆分成一個個的Token。Token包含了比較多的信息,比如Term在文本的中的位置及Term原始文本,以及Term的長度。文本經(jīng)過tokenizer處理后的結(jié)果稱為token stream。token stream其實就是一個個Token的順序排列。token stream將等待著filter來處理。

除了tokenizer外,Lucene的另一個重要組成部分就是filter鏈,filter鏈將用來處理Token Stream中的每一個token。這些處理方式包括刪除Token,改變Token,甚至添加新的Token。Lucene中內(nèi)置了許多filter,讀者也可以輕松地自己實現(xiàn)一個filter。有如下內(nèi)置的filter:

Lowercase filter:把所有token中的字符都變成小寫

ASCII folding filter:去除tonken中非ASCII碼的部分

Synonyms filter:根據(jù)同義詞替換規(guī)則替換相應(yīng)的token

Multiple language-stemming

filters:把Token(實際上是Token的文本內(nèi)容)轉(zhuǎn)化成詞根或者詞干的形式。

所以通過Filter可以讓analyzer有幾乎無限的處理能力:因為新的需求添加新的Filter就可以了。

?索引和查詢

索引過程:Lucene用用戶指定好的analyzer解析用戶添加的Document。當(dāng)然Document中不同的Field可以指定不同的analyzer。如果用戶的Document中有title和description兩個Field,那么這兩個Field可以指定不同的analyzer。

搜索過程:用戶的輸入查詢語句將被選定的查詢解析器(query parser)所解析,生成多個Query對象。當(dāng)然用戶也可以選擇不解析查詢語句,使查詢語句保留原始的狀態(tài)。在ElasticSearch中,有的Query對象會被解析(analyzed),有的不會,比如:前綴查詢(prefix query)就不會被解析,精確匹配查詢(match query)就會被解析。對用戶來說,理解這一點至關(guān)重要。

對于索引過程和搜索過程的數(shù)據(jù)解析這一環(huán)節(jié),我們需要把握的重點在于:倒排索引中詞應(yīng)該和查詢語句中的詞正確匹配。如果無法匹配,那么Lucene也不會返回我們喜聞樂見的結(jié)果。舉個例子:如果在索引階段對文本進(jìn)行了轉(zhuǎn)小寫(lowercasing)和轉(zhuǎn)變成詞根形式(stemming)處理,那么查詢語句也必須進(jìn)行相同的處理?;蚴遣樵兪褂玫腶nalyzer必須和索引時使用的analyzer相同。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Solr&ElasticSearch原理及應(yīng)用 一、綜述 搜索 http://baike.baidu.com/it...
    樓外樓V閱讀 7,630評論 1 17
  • ElasticSearch是一個基于Lucene的搜索服務(wù)器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RE...
    趙昱_dd5c閱讀 336評論 0 0
  • 1. 案例分析:什么時全文檢索,如何實現(xiàn)全文檢索 ? 1.1 案例 ? 實現(xiàn)一個文件的搜索功能,通過關(guān)鍵字搜索文件...
    東方舵手閱讀 1,230評論 0 1
  • elasticsearch ElasticSearch是一個基于Lucene的搜索服務(wù)器。它提供了一個分布式多用戶...
    少年_2ddb閱讀 198評論 0 0
  • ElasticSearch 是一個分布式、高擴(kuò)展、高實時的搜索與數(shù)據(jù)分析引擎。它能很方便的使大量數(shù)據(jù)具有搜索、分析...
    炮炮_06ac閱讀 95評論 0 0

友情鏈接更多精彩內(nèi)容