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));
}
};
我已经实现了自己的 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
.
可以简单到:
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));
}
};