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

标签 java lucene

使用 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/

相关文章:

java - 使用 JasperReports 呈现任意 XHTML

Java11 嵌套类,同时对代码使用 Fluent Design Structure

solr - 如何查询 solr 中的最小值应与 edismax 匹配

java - 使用 20 M 记录的 Lucene 索引需要更多时间

java - 在哪里可以找到有关使用 Lucene 和 Compass 的有用信息?

java - 如何使用JAVA JFrame移动对象?

java - 测试中的 Spring Boot 重写接口(interface)

java - 将java项目部署到谷歌计算引擎

lucene - 使用休眠搜索以单词开头或以单词结尾

java - Hibernate 搜索,过滤器位于其他过滤器之上