lucene(3)—lucene的analysis相关和自定义分词器
analysis说明
lucene ananlysis应用场景
lucene提供了analysis用来将文本转换到索引文件或提供给IndexSearcher查询索引;
对于lucene而言,不管是索引还是检索,都是针对于纯文本输入来讲的;
通过lucene的强大类库我们可以访问各种格式的文档,如HTML、XML、PDF、Word、TXT等,
我们需要传递给lucene的只是文件中的纯文本内容;
lucene的词语切分
lucene的索引和检索前提是其对文本内容的分析和词组的切分;比如,文档中有一句话叫“Hello World,Welcome to China”
我们想找到包含这段话的文档,而用户输入的查询条件又不尽详细(可能只是hello)
这里我们就需要用到lucene索引该文档的时候预先对文档内容进行切分,将词源和文本对应起来。
有时候对词语进行简单切分还远远不够,我们还需要对字符串进行深度切分,lucene不仅能够对索引内容预处理还可以对请求参数进行切分;
使用analyzer
lucene的索引使用如下:
|
|
自定义Analyzer和实现自己的analysis模块
1.要实现自己的analyzer,我们需要继承Analyzer并重写其中的分词模块。
2.维护停止词词典
3.重写TokenStreamComponents方法,选择合适的分词方法,对词语进行过滤
示例代码如下
|
|
运行结果如下:
|
|
说明该分词器对a an 进行了过滤,这些过滤的词在stopWordSet中
添加字长过滤器
有时候我们需要对字符串中的短字符进行过滤,比如welcome to BeiJIng中过滤掉长度小于2的字符串,我们期望的结果就变成了Welcome BeiJing,我们仅需要重新实现createComponents方法,相关代码如下:
|
|
程序的执行结果如下:
|
|
说明小于2个字符的文本被过滤了。