【问题标题】:Changing similarity in lucene FuzzyQuery更改 lucene FuzzyQuery 中的相似性
【发布时间】:2013-08-21 11:18:12
【问题描述】:

我想在搜索索引之前更改相似度。我要做的是:

QueryParser parser = new QueryParser(Version.LUCENE_43, "field", standarAnalyzer);
System.out.println("similarity before: " + parser.getFuzzyMinSim());
parser.setFuzzyMinSim(0.6f);
System.out.println("similarity after: " + parser.getFuzzyMinSim());
Query query = parser.parse(inputString); // inputString is given by the user
System.out.println("Querystring: " + query.toString());

现在,当 inputString = "something~" 然后我得到这个输出

similarity before: 2.0
similarity after: 0.5
Querystring: field:something~2 // Why 2!?

我的问题:

  1. 为什么一开始就设置相似度为2.0(我以为默认是0.5)?
  2. 为什么调用setFuzzyMinSim方法后还是2.0?

【问题讨论】:

    标签: java lucene fuzzy-search


    【解决方案1】:

    FuzzyQuery 在 Lucene 版本 4 中发生了显着变化。“~”后面的数字是最大编辑距离,而不是最小相似度。我不太清楚FuzzyMinSim 是如何映射到最大编辑距离的,就像StandardQueryParser 生成FuzzyQuery 时一样。请注意,不推荐在 4.x 中使用 DefaultFuzzyMinSim

    编辑距离为 2 是默认最大值,FuzzyQuery 类不支持大于 2 的编辑距离,因此标准查询解析器不支持。

    【讨论】:

    • 我使用 luke 来了解生成了哪些具有不同相似性的查询。这个工具真的很有帮助。当相似度在 [0-0.66(6)7) 范围内时,距离设置为 2,在 [0.66(6)7-1] 范围内,距离设置为 1。
    • Michael McCandless,Lucene in Action 的作者,在他的博客上讨论了 Lucene 4.0 中 FuzzyQuery 的变化。新的实现速度明显更快。 blog.mikemccandless.com/2011/03/…
    猜你喜欢
    • 2011-10-05
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 2019-04-02
    • 2013-08-08
    • 1970-01-01
    相关资源
    最近更新 更多