5

我想构建我自己的同时使用过滤器/标记器的分析器。

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

如果仅使用KeywordAnalyzer,则字段的值不区分大小写。如果我使用LowerCaseTokenizerLowerCaseFilter,我必须将它们与执行相同操作 KeywordAnalyzer的其他分析器结合起来(不使用字母、空格、删除停用词等)

问题是:有什么方法可以将该字段设为关键字(将整个流作为单个标记)并使用过滤器或分析器 Lucene 或标记器将该字段设为小写?

(谷歌翻译,错误见谅)

4

2 回答 2

7

这应该有效:

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));
  }
}
于 2012-08-03T08:58:39.423 回答
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));
    }

}
于 2014-06-13T08:41:54.000 回答