使用QueryParser,stemfilter似乎不起作用,并且使用AnalyzingQueryParser,停止过滤器无效.
我的观察是否正确?如何解决这个问题呢?
更新 确定所以对代码进行了一些实验.AnalyzingQueryParser不允许使用stopfilter,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);
Run Code Online (Sandbox Code Playgroud)
创建查询: 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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |