gpt4 book ai didi

elasticsearch - 在Elasticsearch中使用哪个查询执行所有子字符串匹配结果?

转载 作者:行者123 更新时间:2023-12-03 01:04:53 28 4
gpt4 key购买 nike

我要实现商店名称搜索功能,现在,如果我编写商店名称“nite out”,那么我希望我的结果也包含所有子字符串“nite”,“out”和“nite out”。

我尝试使用前缀查询,但无法执行该操作。我听说过模糊查询,但是不知道它能否解决我的问题。

谁能告诉我应该使用哪个ES查询在顶部获得“nite out”匹配结果,而在“nite out”匹配结果以下也休息“nite”和“out”结果。

最佳答案

我将假设您已经对数据进行了索引,以便niteoutnite out是与任何文档匹配的标记。

做到这一点的方法之一就是使用Match Query。匹配查询使用分析器来获取您要查找的fuzziness。在这种特定情况下,我们可以使用空白分析器来获取您想要的结果。它将查看查询nite out并将其分为niteout。然后,匹配查询将搜索这两个标记,并根据相关性进行评分。单独分析了nite outniteout的文档比单独使用niteout的文档的得分更高。

这是使用动态映射的三个文档示例:

索引我们的文档:

PUI   {"value":"out"}
PUT {"value":"nite"}
PUT {"value":"nite out"}

现在构造查询:
GET _search
{
"query": {
"match": {
"value": {
"query": "nite out",
"analyzer": "whitespace"
}
}
}
}

我们实际上不需要在此处指定空白分析器,实际上,我们可以完全删除该行(和前面的逗号)。匹配查询将在索引时间查询的字段所使用的分析器上运行查询文本。在我们的例子中是标准分析器,它将文本分为 niteout

结果:
"hits": [
{
"_index": "test",
"_type": "test",
"_id": "1",
"_score": 0.2712221,
"_source": {
"value": "nite out"
}
},
{
"_index": "test",
"_type": "test",
"_id": "2",
"_score": 0.04500804,
"_source": {
"value": "nite"
}
},
{
"_index": "test",
"_type": "test",
"_id": "3",
"_score": 0.04500804,
"_source": {
"value": "out"
}
}
]

我鼓励您阅读 this link here,以了解Elasticsearch中的不同搜索机制

关于elasticsearch - 在Elasticsearch中使用哪个查询执行所有子字符串匹配结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32075616/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com