Solr中的模糊搜索

Solr中的模糊搜索,solr,fuzzy-search,Solr,Fuzzy Search,我正在使用Solr处理一个模糊查询,它会遍历可能有拼写错误或缩写词的数据存储库。例如,存储库的名称可以有“Hlth”(单词“Health”的缩写形式)字样 如果我对Name:'Health'~0.35进行模糊搜索,我得到的结果是单词'Health',而不是'Hlth' 如果我对Name:'Hlth'~0.35进行模糊搜索,我会得到名为“Health”和“Hlth”的记录 我想让第一个查询开始工作。在我的业务用例中,我必须使用干净的数据来查询所有拼写错误或缩写的单词 请有人帮忙解释一下为什么#1模

我正在使用Solr处理一个模糊查询,它会遍历可能有拼写错误或缩写词的数据存储库。例如,存储库的名称可以有“Hlth”(单词“Health”的缩写形式)字样

  • 如果我对
    Name:'Health'~0.35进行模糊搜索,我得到的结果是单词'Health',而不是'Hlth'
    
  • 如果我对
    Name:'Hlth'~0.35进行模糊搜索,我会得到名为“Health”和“Hlth”的记录
  • 我想让第一个查询开始工作。在我的业务用例中,我必须使用干净的数据来查询所有拼写错误或缩写的单词


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

    您使用模糊查询的方式是错误的

    根据Mike McCandless所说的():

    FuzzyQuery将术语“接近”匹配到指定的基本术语:指定允许的最大编辑距离,并匹配该编辑距离内的任何术语(然后匹配包含这些术语的文档)

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

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

    因此,您需要编写这样的查询-Health~2

    您可以这样写:“我想将Parkway与Pkwy匹配”

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


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

    使用语音过滤器可以解决您的问题

    请考虑以下几点


    希望这有帮助。

    不行!我想将Parkway与Pkwy相匹配,反之亦然。Parkway~2只匹配Parkway和Pkwy~2只匹配Pkwy@Mysterion:FuzzyQuery不工作为什么?它尝试了=“谁是约翰”~0.2