【问题标题】:Lucene QueryParser needed that works with Custom Analyzer having stopfilter and porterstemfilterLucene QueryParser 需要与具有 stopfilter 和 porterstemfilter 的自定义分析器一起使用
【发布时间】:2010-05-17 19:03:59
【问题描述】:

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

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

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

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

【问题讨论】:

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

标签: java lucene


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多