使用 QueryParser,stemfilter 似乎不起作用,使用 AnalyzingQueryParser,停止过滤器无效。
我的观察是否正确? 如何解决这个问题?
更新 好的 所以用代码做了一些实验。 AnalyzingQueryParser 不允许停止过滤器,而 QueryParser 不允许带有模糊搜索的 porterstemmerfilter。
所以我需要一个 QueryParser,它允许模糊搜索以及对 porterstemfilter 和 stopfilter 的支持。
最佳答案
如果需要,您可以通过子类化来覆盖扩展 QueryParser。我能够毫无问题地将 StopAnalyzer 与 AnalyzingQueryParser 一起使用:
Analyzer analyzer1 = new StopAnalyzer(Version.LUCENE_30, ImmutableSet.of("foo", "bar", "blop"));
QueryParser qp = new AnalyzingQueryParser(Version.LUCENE_30, "field", analyzer1);
Query q = qp.parse("foobar foo bar blop hello");
System.out.println("query " + q);
q = qp.parse("foobar~ foo~ bar~ hell~");
System.out.println("query " + q);
创建查询:field:foobar field:hello 和 field:foobar~0.5 hell~0.5。这是lucene 3.0.3,所以我不确定这是否适用于你当时的问题。无论如何,我偶然发现了这一点,希望它能有所帮助。如果词干分析器添加通配符查询,您可能会遇到问题,在这种情况下,您可能希望重写这些方法:
@Override
protected Query getFuzzyQuery(String field, String termStr, float minSimilarity) throws ParseException {
return super.getFuzzyQuery(field, termStr, minSimilarity);
}
@Override
protected Query getWildcardQuery(String field, String termStr) throws ParseException {
return super.getWildcardQuery(field, termStr);
}
关于java - Lucene QueryParser 需要与具有 stopfilter 和 porterstemfilter 的自定义分析器一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2851939/