分词
lucene在查询和建立索引文件的过程中,都是基于语素单元来操作的。而分词就是将查询语句,转换为一个个单独的语素单元。
主要通过Analyzer类解析实现,Analyzer通过调用TokenStream来实现。
分词的主要架构:
Analyzer
常用的有:
SimpleAnalyzer: 将查询语句转换为语素单元时完成转换为小写的操作。
StandardAnalyzer :最为常用的智能分词器,通过这两个LowerCaseFilter和StopFilterTokenStream。能完成诸如邮件、字母分析处理。
WhitespaceAnalyzer :以空格为分词符进行分析处理。
如:I am coder----I am coder
analyzer类的结构
![这里写图片描述](http://img.blog.csdn.net/20150603114018052)
Lucene3.5 有9种分词器。继承Analyzer抽象类内部通过tokenStream(String fieldName, Reader reader)方法来处理读取的查询数据,Analyzer和不同子类分词器的实现,应该能看到组合模式的设计。
TokenStream:经过分词、过滤处理后的结果流。
主要有public abstract boolean incrementToken() throws IOException 方法来实现分词后各语素的处理读取操作。
. tokenFilter 和 Tokenizer来实现 去停留词和得到分词单元。
一般处理流程
分词器主要流程
第一步:reader对象读取分词数据
第二步:Tokenier 负责将一组数组分解为一个个的单元
如:I am coder----I am coder
第三步:经过多重过滤器对分词数据进行过滤操作。过滤的作用是去除停留词,并形态还原,统一大小写等。
去除停留词就是去除类似in of等没有确切含义的词,形态还原则是将过去分词、过去式这样的词还原为原来的形态。如:termming-term。
总的来讲,lucene的分词器主要做了一个什么样的工作呢?从查询语句分解为一个个查询单元的工作。这么做的目的是为了lucene在查询时候更好的细粒度的去匹配已创建的索引文件。
原文地址:http://blog.csdn.net/cfl20121314/article/details/46343101