我正在使用Solr进行模糊查询,该查询遍历可能包含拼写错误的单词或缩写词的数据存储库。例如,存储库的名称可以带有单词“Hlth”(缩写形式为“Health”)。
Name:'Health'~0.35
进行模糊搜索,我会得到带有'Health'字样而不是'Hlth'字样的结果。 Name:'Hlth'~0.35
进行模糊搜索,我会得到名为'Health'和'Hlth'的记录。我想先得到第一个查询。在我的商务用例中,我将不得不使用干净的数据来查询所有拼写错误或缩写的单词。
有人可以请求帮助,并说明为什么#1模糊搜索不起作用以及是否有其他方法可以实现相同目的。
答案 0 :(得分:5)
您以错误的方式使用模糊查询。
根据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
答案 1 :(得分:2)
你写道:"我希望将Parkway与Pkwy"
相匹配Parkway和Pkwy的编辑距离为3.您可以通过在" ~3"为" ~2"从第一个响应开始,但出于性能原因,建议不要将Solr模糊匹配用于大于2的值。
我认为解决问题的最佳方法是生成特定于上下文的同义词词典并进行查询时扩展。
答案 2 :(得分:0)