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

时间:2015-09-27 15:34:22

标签: php elasticsearch relevance

我是ElasticSearch的新手,但在过去的几天里一直在阅读它,试图想出最好的'搜索我的应用程序的类型。我希望能够将多个术语与多个结果匹配,但也有部分单词结果。下面列出的是我目前正在使用的内容,它可以很好地找到输入的所有单词的结果,例如密歇根创意副总裁'找到为密歇根创意和VP Comm工作的人,但是当我搜索' manage'而不是管理'什么都没有出现。

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

我读过有关通配符但是看到人们说结果很慢,我不确定他们是否也会考虑搜索中的每个字。有人可以请帮助我找到可以获得部分匹配的正确搜索配置。

1 个答案:

答案 0 :(得分:2)

一些想法

  1. fuzzy_like_this查询的构建方式更像是这样。基本上它通常用于内容中的推荐。这是你在做什么的?对于更典型的搜索,我希望看到matchmulti_match个查询。你试过这些吗?

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

      

    密歇根创意副总裁'找到为密歇根创意和VP Comm工作的人,但是当我搜索' manage'而不是管理'什么都没有出现。

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

  3. 您的模糊度似乎不足以将查询managemanagement匹配。检查您应该使用的formula here,您可以计算允许修改这一项的数量:

    length(term) * (1.0 - fuzziness)

    在这种情况下意味着

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

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

  4. 一些更大的图片指针:

    • 仅搜索编辑距离可能不会影响搜索引擎的核心力量。当您使用分析过程获取文本并将其标准化为标记时,搜索引擎将更好地使用。我可能会建议您阅读this post作为入门读物。我们还在本书第4章Relevant Search

    • 中详细讨论了这一点
    • 了解分析后,将managementmanage匹配的一般问题的更好解决方案可能是stemming,在尝试匹配之前会将术语缩减为其根形式。

    • 根据您对搜索匹配规则的看法,听起来您可能想要设置测试用例,并使用test driven approach进行搜索。