【问题标题】:Fuzzy Search in SolrSolr 中的模糊搜索
【发布时间】:2013-05-15 09:21:06
【问题描述】:

我正在使用 Solr 进行模糊查询,该查询会检查可能有拼写错误的单词或缩写词的数据存储库。例如,存储库的名称可能包含“Hlth”(单词“Health”的缩写形式)。

  1. 如果我对Name:'Health'~0.35 进行模糊搜索,我会得到包含单词“Health”而不是“Hlth”的结果。
  2. 如果我对 Name:'Hlth'~0.35 进行模糊搜索,我会得到名称为“Health”和“Hlth”的记录。

我想让第一个查询工作。在我的业务用例中,我必须使用干净的数据来查询所有拼写错误或缩写的单词。

有人可以帮忙解释一下为什么 #1 模糊搜索不起作用,以及是否有任何其他方法可以达到同样的效果。

【问题讨论】:

    标签: solr fuzzy-search


    【解决方案1】:

    你以错误的方式使用模糊查询。

    根据 Mike McCandless 所说的 (http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html):

    FuzzyQuery 将术语与指定的基本术语“接近”匹配:您指定允许的最大编辑距离,并且与基本术语(以及包含这些术语的文档)在该编辑距离内的任何术语都匹配。

    QueryParser 语法是 term~ 或 term~N,其中 N 是最大值 允许的编辑次数(对于旧版本 N 是一个令人困惑的浮点数 介于 0.0 和 1.0 之间,转换为等效的最大编辑 距离通过一个棘手的公式)。

    FuzzyQuery 非常适合匹配专有名称:我可以搜索 mcandless~1 它将匹配 mccandless (插入 c), mcandles (删除 s)、mkandless(用 k 代替 c)和许多其他“接近”的术语。 使用最大编辑距离 2,您最多可以进行 2 次插入、删除或 换人。每场比赛的得分基于编辑距离 该术语的;所以精确匹配得分最高;编辑距离1, 降低;等等

    所以你需要编写这样的查询 - Health~2

    【讨论】:

    • 不起作用!我想将 Parkway 与 Pkwy 相匹配,反之亦然。 Parkway~2 仅匹配 Parkway 和 Pkwy~2 仅匹配 Pkwy
    • @Mysterion : FuzzyQuery 为什么不起作用?它试过=“谁是约翰”~0.2
    【解决方案2】:

    您写道:“我想将 Parkway 与 Pkwy 匹配”

    Parkway 和 Pkwy 的编辑距离为 3。您可以通过从第一个响应中将“~3”替换为“~2”来实现此目的,但出于性能原因,不建议将 Solr 模糊匹配用于大于 2 的值。

    我认为解决您的问题的最佳方法是生成特定于上下文的同义词词典并进行查询时间扩展。

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 2013-02-18
        • 1970-01-01
        • 2013-01-21
        • 2012-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多