zoukankan      html  css  js  c++  java
  • Lucene的分析器理解

     

    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的集合变小。更利于同义词写入。

  • 相关阅读:
    day03接口的初期认识
    day03模板方法设计模式
    day02抽象类的练习
    day02抽象类1
    final 关键字
    day01子类与父类特点
    day01继承extends
    day01函数的重载
    图解HTTPS
    编译的时候遇到 The type java.lang.Object cannot be resolved.
  • 原文地址:https://www.cnblogs.com/highriver/p/2258464.html
Copyright © 2011-2022 走看看