天天看点

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)创建索引是对语汇单元索引,通过词语找文档,这种索引的结构叫倒排索引结构。

倒排索引结构就是反向索引结构,包括索引和文档两部分,索引即词汇表,它的规模较小,而文档集合较大。

理解倒排序是理解搜索是怎么实现的重要基础(由于比较抽象,难懂,我自己也不懂,暂不继续介绍)