天天看點

SpringBoot+Lucene第三篇——分詞

Lucene的學習第三篇——分詞

Lucene建立索引—分詞

分詞主要介紹這幾個問題

 分詞是什麼?

 分詞幹嘛?

 分詞怎麼分?

疑問:

看完這篇,帶着疑問看下一篇

下一篇的代碼中,能找到aaabbb.txt文檔,但是我們不能找到aaabbb文檔,好像說明fileName隻能進行了精确比對。但是不能找到“XXXX.txt”文檔,

說明不是精确比對,而是在索引庫中“全文檢索.txt”或者“全文檢索.txt”,” spring”這些詞的索引。

同理:名字都這麼麻煩,如果要搜尋内容,豈不是更麻煩。是以要進行分詞。

下篇文章第一段代碼中:使用的是官方推薦的标準分詞器

Analyzer analyzer=new StandardAnalyzer();//标準的分詞器

分詞就是将一句話,或者一段話,或者長詞,分成一個一個的詞語。比如:“全文檢”索:分成:“全文”、“檢索”、“全文檢索”。

 分詞幹嘛?

分詞後,就是對每個詞建立索引,比如: “全文”、“檢索”、“全文檢索”。都建立了索引,那麼你搜任意的這三個詞語都能找到文檔,同理,将文檔内容分詞,隻要輸入任意詞。就能找到該文檔。

 怎麼分?

分詞流程
           
SpringBoot+Lucene第三篇——分詞

舉例說明:

原文檔内容(摘自官網):

Lucene is a Java full-text search engine. Lucene is not a complete

application, but rather a code library and API that can easily be used

to add search capabilities to applications.

分析後得到的詞:

lucene、java、full、search、engine。。。。

大小變小寫,

标點過濾,

停用詞過濾,(is,a 等沒有意義的單詞或者字母)

引出新概念:語彙單元

lucene、java、full、search、engine等分出來的詞叫做語彙單元。叫做term

總結:

1)将原始内容建立為包含域(Field)的文檔對象,需要再對域中的内容進行分析,分析成為一個一個的單詞。也就是分詞

2)每個分出來的單詞,就是一個語彙單元,就是term。注意:

3)每個term中包含兩部分内容:一部分是文檔對象的域名,一部分是term内容,

分詞後得到term

不同的域中拆出來的相同的單詞,不是同一個語彙單元 (思考為什麼)

4)對所有文檔分析得出的語彙單元進行索引,索引的目的是為了搜尋,最終要實作隻搜尋被索引的語彙單元進而找到文檔對象。

5)建立索引是對語彙單元索引,通過詞語找文檔,這種索引的結構叫反向索引結構。

反向索引結構就是反向索引結構,包括索引和文檔兩部分,索引即詞彙表,它的規模較小,而文檔集合較大。

了解倒排序是了解搜尋是怎麼實作的重要基礎(由于比較抽象,難懂,我自己也不懂,暫不繼續介紹)