Lucene的学习第三篇——分词
Lucene创建索引—分词
分词主要介绍这几个问题
分词是什么?
分词干嘛?
分词怎么分?
疑问:
看完这篇,带着疑问看下一篇
下一篇的代码中,能找到aaabbb.txt文档,但是我们不能找到aaabbb文档,好像说明fileName只能进行了精确匹配。但是不能找到“XXXX.txt”文档,
说明不是精确匹配,而是在索引库中“全文检索.txt”或者“全文检索.txt”,” spring”这些词的索引。
同理:名字都这么麻烦,如果要搜索内容,岂不是更麻烦。所以要进行分词。
下篇文章第一段代码中:使用的是官方推荐的标准分词器
Analyzer analyzer=new StandardAnalyzer();//标准的分词器
分词就是将一句话,或者一段话,或者长词,分成一个一个的词语。比如:“全文检”索:分成:“全文”、“检索”、“全文检索”。
分词干嘛?
分词后,就是对每个词建立索引,比如: “全文”、“检索”、“全文检索”。都建立了索引,那么你搜任意的这三个词语都能找到文档,同理,将文档内容分词,只要输入任意词。就能找到该文档。
怎么分?
分词流程
举例说明:
原文档内容(摘自官网):
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)创建索引是对语汇单元索引,通过词语找文档,这种索引的结构叫倒排索引结构。
倒排索引结构就是反向索引结构,包括索引和文档两部分,索引即词汇表,它的规模较小,而文档集合较大。
理解倒排序是理解搜索是怎么实现的重要基础(由于比较抽象,难懂,我自己也不懂,暂不继续介绍)
还没有评论,来说两句吧...