highriver

 

 

Analyizer是用来分析文本的核心抽象类。它的返回是TokenStream,用来遍历所有的Token。该类的抽象核心方法是
TokenStream  tokenStream(String field,Reader reader){
    1.利用依赖的Tokenizer对象获得最初的TokenStream。
    2.利用TokenFilter层层过滤初始TokenStream并返回。
}

Lucene封装了几个Analyzer实现类。当然用户可以根据自己的应用程序去定制Analyzer。Lucene内置的几个现成的类中,最有用的是StantAnalyzer和StopAnalyzer。其它的几个象WhiteSpaceAnalyzer以及SimpleAnalyzer都是用来单元测试的。没有实际的使用价值。
自定义的场景比如自己根据应用提供了停用词集合。而不是默认的StopFilter包含的那些this, that,at等停用词。



TokenFilter的顺序还是比较重要的
1.顺序错误,影响的结果一个是Filter可能不起使用了。
LowerCaseToTokenizer=LowerCaseFilter+ LetterTokenizer , 前者效率更高,在分词的时候就做了小写转换。
StopFilter->LowerCaseFilter->LetterTokenizer  对于字符串" The day come" 过滤的结果是day come
而LowerCaseFilter->StopFilter->LetterTokenizer 的结果是the day come。注意到the变成了小写返回,并没有过滤,原因就是Filter的顺序打乱后,StopFilter由于是大小写敏感,所以无法过滤The导致。
2.顺序另一个影响是性能。
比如StopFilter+同义词写入与同义词写入+StopFilter的性能是完全不同的。先通过StopFilter做一些减法会让TokenStream的集合变小。更利于同义词写入。

分类:

技术点:

相关文章:

  • 2021-04-20
  • 2018-12-10
  • 2021-09-14
  • 2021-09-14
  • 2022-01-08
  • 2021-10-06
  • 2021-11-30
  • 2021-12-15
猜你喜欢
  • 2021-09-14
  • 2021-12-11
  • 2021-12-01
  • 2021-09-14
  • 2021-09-14
  • 2021-04-13
  • 2021-09-14
相关资源
相似解决方案