Java Lucene QueryParser需要与具有stopfilter和porterstemfilter的自定义分析器一起工作

Java Lucene QueryParser需要与具有stopfilter和porterstemfilter的自定义分析器一起工作,java,lucene,Java,Lucene,使用QueryParser时,stemfilter似乎不起作用,而使用AnalyzingQueryParser时,stop filter无效 我的观察正确吗? 如何解决这个问题 更新 对代码做了一些实验。AnalyzingQueryParser不允许使用stopfilter,QueryParser不允许使用FuzzySearch的porterstemmerfilter 因此,我需要一个允许模糊搜索的QueryParser,以及对porterstemfilter和stopfilter的支持。如果需

使用QueryParser时,stemfilter似乎不起作用,而使用AnalyzingQueryParser时,stop filter无效

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

更新 对代码做了一些实验。AnalyzingQueryParser不允许使用stopfilter,QueryParser不允许使用FuzzySearch的porterstemmerfilter


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

如果需要,可以通过子类化来覆盖扩展QueryParser。我能够使用带有AnalyzingQueryParser的StopAnalyzer,没有问题:

Analyzer Analyzer 1=新的StopAnalyzer(Version.LUCENE_30,ImmutableSet.of(“foo”、“bar”、“blop”);
QueryParser qp=新分析QueryParser(Version.LUCENE_30,“field”,analyzer1);
查询q=qp.parse(“foobar foobar blop hello”);
System.out.println(“查询”+q);
q=qp.parse(“foobar~foo~bar~hell~”;
System.out.println(“查询”+q);
创建查询:field:foobar field:hello和field:foobar~0.5 hell~0.5。这是lucene 3.0.3,所以我不确定这是否适用于你当时的问题。不管怎样,我偶然发现了这一点,希望它能有所帮助。如果词干分析器添加通配符查询,您可能会遇到问题,在这种情况下,您可能希望覆盖这些方法:

@覆盖
受保护的查询getFuzzyQuery(字符串字段、字符串termStr、float minSimilarity)引发ParseException异常{
返回super.getFuzzyQuery(field、termStr、minSimilarity);
}
@凌驾
受保护的查询getWildcardQuery(字符串字段,字符串termStr)引发ParseException{
返回super.getWildcardQuery(字段,termStr);
}

如果有人对此有不同意见,请说出来。我已经有一段时间没有与lucene合作了,但我确实记得您需要使用相同的分析器来编制索引和搜索。这可能是问题所在吗?请提供更多信息。你是如何得出事情不起作用/无效的结论的?