Lucene 7.5.0 如何将小写扩展项设置为 true

Lucene 7.5.0 how to set lowercase expanded terms to true

我已经实现了自己的 Analyzer、QueryParser 和 PerFieldAnalyzerWrapper 来实现 ElasticSearch ${field}.raw 特性。一切似乎都工作正常,除了我在 StringField 类型上使用通配符等进行测试时。

我理解这是因为这些查询根本不使用分析器。

在以前的 lucene 版本中,there was a config option to enable the lowercasing of these queries

我在最新的 7.5.0 版本中找不到如何执行此操作。任何人都可以阐明这一点吗?

扩展项由 Analyzer.normalize 处理。由于您已经实现了自己的分析器,因此添加通过 LowerCaseFilter.

运行 tokenStream 的 normalize 方法的实现

可以简单到:

public class MyAnalyzer extends Analyzer {
    protected TokenStreamComponents createComponents(String fieldName) {
        //Your createComponents implementation
    }

    protected TokenStream normalize(String fieldName, TokenStream in) {
        return new LowerCaseFilter(in);
    }
}

您可以像这样设置一个分析器有关更多详细信息,您可以查看此 link Git link for CJK Bigram Plugin

    @BeforeClass
public static void setUp() throws Exception {
    analyzer = new Analyzer() {
        @Override
        protected TokenStreamComponents createComponents(String fieldName) {
            Tokenizer source = new IcuTokenizer(AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY,
                    new DefaultIcuTokenizerConfig(false, true));
            TokenStream result = new CJKBigramFilter(source);
            return new TokenStreamComponents(source, new StopFilter(result, CharArraySet.EMPTY_SET));
        }
    };
    analyzer2 = new Analyzer() {
        @Override
        protected TokenStreamComponents createComponents(String fieldName) {
            Tokenizer source = new IcuTokenizer(AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY,
                    new DefaultIcuTokenizerConfig(false, true));
            TokenStream result = new IcuNormalizerFilter(source,
                    Normalizer2.getInstance(null, "nfkc_cf", Normalizer2.Mode.COMPOSE));
            result = new CJKBigramFilter(result);
            return new TokenStreamComponents(source, new StopFilter(result, CharArraySet.EMPTY_SET));
        }
    };