如何在 Elasticsearch 中通过完全匹配的字段搜索查询
How to search query by field with exact match in Elasticsearch
我正在尝试按字段值搜索文档。该字段是在索引中定义的字符串类型,如下所示:
"field" : {
"type" : "string"
}
除映射外,索引没有其他设置。
我尝试了各种查询以尝试查找包含 field="test"
的文档,但每次我都没有得到任何结果或包含该子字符串 "test"
的结果。我想要 "field"
与 "test"
完全匹配的文档。
我尝试了 match
、match_phrase
、term
和 query_string
,none 似乎如我所愿。
您需要使用 term
带有这样关键字的查询
{
"query" : {
"term" : {
"field.keyword" : "test"
}
}
}
希望这对您有所帮助。
看来您使用的是版本 6 之前的 Elasticsearch 版本,该版本仍然支持 String
类型。更新版本的 Elasticsearch 将 string
字段类型替换为 keyword
和 text
类型,以便更轻松地支持 exact-match
和 full-text
这两个用例] 搜索用例。
您需要更改映射以支持精确匹配搜索,如下所示:
{
"field": {
"type" "string",
"index": "not_analyzed"
}
}
由于您无法更改现有映射,因此您需要对新索引进行更改并重新索引所有内容。
如果您使用的是 Elasticsearch 版本 6+,只需使用 keyword
类型的字段进行精确匹配搜索。默认情况下,字符串字段会映射到由 2 个字段组成的多字段:
text
类型之一(用于全文搜索),由 引用
keyword
类型之一(用于精确匹配搜索),由 .keyword 引用
特此发布关于该主题的有趣博客 post:Strings are dead, long live strings!
我正在尝试按字段值搜索文档。该字段是在索引中定义的字符串类型,如下所示:
"field" : {
"type" : "string"
}
除映射外,索引没有其他设置。
我尝试了各种查询以尝试查找包含 field="test"
的文档,但每次我都没有得到任何结果或包含该子字符串 "test"
的结果。我想要 "field"
与 "test"
完全匹配的文档。
我尝试了 match
、match_phrase
、term
和 query_string
,none 似乎如我所愿。
您需要使用 term
带有这样关键字的查询
{
"query" : {
"term" : {
"field.keyword" : "test"
}
}
}
希望这对您有所帮助。
看来您使用的是版本 6 之前的 Elasticsearch 版本,该版本仍然支持 String
类型。更新版本的 Elasticsearch 将 string
字段类型替换为 keyword
和 text
类型,以便更轻松地支持 exact-match
和 full-text
这两个用例] 搜索用例。
您需要更改映射以支持精确匹配搜索,如下所示:
{
"field": {
"type" "string",
"index": "not_analyzed"
}
}
由于您无法更改现有映射,因此您需要对新索引进行更改并重新索引所有内容。
如果您使用的是 Elasticsearch 版本 6+,只需使用 keyword
类型的字段进行精确匹配搜索。默认情况下,字符串字段会映射到由 2 个字段组成的多字段:
text
类型之一(用于全文搜索),由 引用
keyword
类型之一(用于精确匹配搜索),由 .keyword 引用
特此发布关于该主题的有趣博客 post:Strings are dead, long live strings!