Lucene QueryParser需要适用于具有stopfilter和porterstemfilter的Custom Analyzer

时间:2010-05-17 19:04:00

标签: java lucene

使用QueryParser,stemfilter似乎不起作用,而使用AnalyzingQueryParser,停止过滤器无效。

我的观察是否正确? 如何解决这个问题?

更新 好的,所以对代码进行了一些实验。 AnalyzingQueryParser不允许使用stopfilter,并且QueryParser不允许使用模糊搜索进行porterstemmerfilter。

所以我需要一个QueryParser,它允许模糊搜索以及对porterstemfilter和stopfilter的支持。

1 个答案:

答案 0 :(得分:0)

如果需要,可以通过子类化来覆盖扩展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 and 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);
}