KeywordAnalyzer和LowerCaseFilter / LowerCaseTokeniz

2019-06-26 17:32发布

我想建立自己的分析仪同时使用过滤器/断词。

我的意思是,相同的字段是关键字 (整个流作为一个单一令牌)和小写

如果KeywordAnalyzer只使用,字段的值保持不区分大小写。 如果我使用LowerCaseTokenizer或LowerCaseFilter我必须把它们与做同样的事情其他分析仪结合KeywordAnalyzer (由无字母分开,用空格,删除停止的话,等等)

现在的问题是 :有没有什么办法,使这一领域作为关键字(整个流作为一个单一的令牌)和使用过滤器或分析仪的Lucene或断词是小写

(谷歌翻译,比较遗憾的错误)

Answer 1:

这应该工作:

public final class YourAnalyzer extends ReusableAnalyzerBase { 

  @Override
  protected TokenStreamComponents createComponents(final String fieldName, final Reader reader) {
    final TokenStream source = new KeywordTokenizer(reader);
    return new TokenStreamComponents(source, new LowercaseFilter(Version.LUCENE_36, source));
  }
}


Answer 2:

在Lucene的3.6.2它必须是这样的:

import org.apache.lucene.analysis.KeywordAnalyzer;
import org.apache.lucene.analysis.KeywordTokenizer;
import org.apache.lucene.analysis.LowerCaseFilter;
import org.apache.lucene.analysis.LowerCaseTokenizer;
import org.apache.lucene.analysis.ReusableAnalyzerBase;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.util.Version;

public class YourAnalyzer extends ReusableAnalyzerBase {

    private final Version version;

    public YourAnalyzer(final Version version) {
        super();
        this.version = version;
    }

    @Override
    protected TokenStreamComponents createComponents(final String fieldName, final Reader reader) {
        final Tokenizer source = new KeywordTokenizer(reader);
        return new TokenStreamComponents(source, new LowerCaseFilter(this.version, source));
    }

}


文章来源: KeywordAnalyzer and LowerCaseFilter/LowerCaseTokenizer