为什么我的fuzzy_like_this查询在某些情况下匹配,而在其他情况下不匹配?



我是ElasticSearch的新手,但在过去的几天里一直在阅读它,试图提出"最佳"类型的搜索我的应用程序。我希望能够匹配多个词与多个结果,但也有部分词的结果。下面列出的是我目前正在使用的,它可以很好地找到所有输入的单词,例如"Michigan Creative VP"可以找到为Michigan Creative和VP Comm工作的人,但是当我搜索"管理"而不是"管理"时,什么也没有出现。

$params =
            [
                'index' => 'myindex',
                'type' => 'person',
                'body' =>
                    [
                        'from' => 0,
                        'size' => 500,
                        'query' =>
                            [
                                'fuzzy_like_this' =>
                                    [
                                        '_all' =>
                                            [
                                                'like_text' => $keywords,
                                                'fuzziness' => 0.5,
                                            ],
                                    ],
                            ],
                    ]
            ];

我读过通配符,但看到人们说结果很慢,我不确定他们也考虑了搜索中的每个单词。有人能帮我指出正确的搜索配置,可以得到部分匹配。

几点思考

  1. fuzzy_like_this查询是为类似这样的情况而构建的。基本上,它通常用于内容内推荐。这就是你要做的吗?对于更典型的搜索,我希望看到matchmulti_match查询。你试过这些吗?

  2. 看起来文本正在被标记化,而fuzzy_like_this正在像传统搜索一样匹配精确的标记。例如

    Michigan Creative VP'找到了为Michigan Creative和VP Comm工作的人,但是当我搜索'manage'而不是'management'时,什么也没有出现。

    似乎向我表明文档包含术语[vp]和[comm],并且您的查询匹配,因为查询中的[vp]是匹配的。其他文档匹配,因为[michigan]和[creative]是完全匹配的

  3. 您的模糊度似乎不够高,无法匹配查询managemanagement。检查下面的公式,您可以计算出允许在搜索结果中进行多少次编辑:

    length(term) * (1.0 - fuzziness)

    在这里是指

    length(manage) * 0.5 == 6 * 0.5 or 3

    似乎允许最多3个字符的编辑,management添加了4个字符

一些更大的图片指针:

  • 仅通过编辑距离进行搜索可能无法实现搜索引擎的核心优势。当您获取文本并使用分析过程将其规范化为标记时,搜索引擎将得到更好的使用。我建议把这篇文章作为入门。我们在我的书《相关搜索

  • 》的第四章中也详细讨论了这一点。
  • 一旦你理解了分析,一个更好的解决managementmanage匹配的一般问题的方法可能是词干提取,它在尝试匹配之前将术语减少到它们的根形式。

  • 根据你对搜索匹配规则的看法,听起来你可能想要设置测试用例,并使用测试驱动的方法来搜索。

相关内容

  • 没有找到相关文章

最新更新