在 Elasticsearch 中使用哪个查询来执行所有子字符串匹配结果?
Which Query to use in Elasticsearch tp perform all substring matched results?
我想实现商店名称搜索功能,现在如果我写一个商店名称 "nite out" 那么我希望我的结果包含所有子字符串 "nite" 和 "out" 和 "nite out"也。
我尝试使用前缀查询但无法执行。我听说过模糊查询,但不知道它是否能解决我的问题。
任何人都可以告诉我我应该使用哪个 ES 查询来获得顶部的 "nite out" 匹配结果,其余的 "nite" 和 "out" 结果也在 "nite out" 以下匹配的结果。
我假设您的数据已经编入索引,因此 nite
、out
和 nite out
是匹配任何文档的标记。
其中一种方法是使用 Match Query。 Match 查询使用分析器来获取您要查找的 fuzziness
。在这种特定情况下,我们可以使用空白分析器来获得您要查找的结果。它将查看查询 nite out
并将其拆分为 nite
和 out
。然后,匹配查询将搜索这两个标记,并根据相关性进行评分。 nite out
被分析为 nite
和 out
的文档将比仅具有 nite
或 out
的文档本身具有更高的分数。
这是一个使用动态映射的三文档示例:
索引我们的文档:
PUI {"value":"out"}
PUT {"value":"nite"}
PUT {"value":"nite out"}
现在构建查询:
GET _search
{
"query": {
"match": {
"value": {
"query": "nite out",
"analyzer": "whitespace"
}
}
}
}
我们实际上不需要在这里指定空白分析器,事实上我们可以完全删除该行(和前面的逗号)。匹配查询将 运行 我们在索引时查询的字段使用的分析器上的查询文本。在我们的例子中,它是标准分析器,它将文本分成 nite
和 out
.
结果:
"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 中的不同搜索机制
我想实现商店名称搜索功能,现在如果我写一个商店名称 "nite out" 那么我希望我的结果包含所有子字符串 "nite" 和 "out" 和 "nite out"也。
我尝试使用前缀查询但无法执行。我听说过模糊查询,但不知道它是否能解决我的问题。
任何人都可以告诉我我应该使用哪个 ES 查询来获得顶部的 "nite out" 匹配结果,其余的 "nite" 和 "out" 结果也在 "nite out" 以下匹配的结果。
我假设您的数据已经编入索引,因此 nite
、out
和 nite out
是匹配任何文档的标记。
其中一种方法是使用 Match Query。 Match 查询使用分析器来获取您要查找的 fuzziness
。在这种特定情况下,我们可以使用空白分析器来获得您要查找的结果。它将查看查询 nite out
并将其拆分为 nite
和 out
。然后,匹配查询将搜索这两个标记,并根据相关性进行评分。 nite out
被分析为 nite
和 out
的文档将比仅具有 nite
或 out
的文档本身具有更高的分数。
这是一个使用动态映射的三文档示例:
索引我们的文档:
PUI {"value":"out"}
PUT {"value":"nite"}
PUT {"value":"nite out"}
现在构建查询:
GET _search
{
"query": {
"match": {
"value": {
"query": "nite out",
"analyzer": "whitespace"
}
}
}
}
我们实际上不需要在这里指定空白分析器,事实上我们可以完全删除该行(和前面的逗号)。匹配查询将 运行 我们在索引时查询的字段使用的分析器上的查询文本。在我们的例子中,它是标准分析器,它将文本分成 nite
和 out
.
结果:
"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 中的不同搜索机制