我是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,
],
],
],
]
];
我读过有关通配符但是看到人们说结果很慢,我不确定他们是否也会考虑搜索中的每个字。有人可以请帮助我找到可以获得部分匹配的正确搜索配置。
答案 0 :(得分:2)
一些想法
fuzzy_like_this查询的构建方式更像是这样。基本上它通常用于内容中的推荐。这是你在做什么的?对于更典型的搜索,我希望看到match
或multi_match
个查询。你试过这些吗?
看来文本正在被标记化,而fuzzy_like_this正如传统搜索那样匹配精确的标记。例如
密歇根创意副总裁'找到为密歇根创意和VP Comm工作的人,但是当我搜索' manage'而不是管理'什么都没有出现。
似乎向我表明文档包含术语[vp]和[comm],并且您的查询匹配,因为查询中的[vp]是匹配的。其他文件匹配,因为[密歇根]和[创意]是完全匹配
您的模糊度似乎不足以将查询manage
与management
匹配。检查您应该使用的formula here,您可以计算允许修改这一项的数量:
length(term) * (1.0 - fuzziness)
在这种情况下意味着
length(manage) * 0.5 == 6 * 0.5 or 3
似乎允许编辑最多3个字符,management
添加4个字符
仅搜索编辑距离可能不会影响搜索引擎的核心力量。当您使用分析过程获取文本并将其标准化为标记时,搜索引擎将更好地使用。我可能会建议您阅读this post作为入门读物。我们还在本书第4章Relevant Search
了解分析后,将management
与manage
匹配的一般问题的更好解决方案可能是stemming,在尝试匹配之前会将术语缩减为其根形式。
根据您对搜索匹配规则的看法,听起来您可能想要设置测试用例,并使用test driven approach进行搜索。