【发布时间】:2021-06-13 05:54:29
【问题描述】:
我正在尝试查询在特定文本字段 Field_Name_1 上具有匹配值的所有文档的索引,并过滤这些结果以仅显示 Field_Name_2 字段在提供的列表中具有任何数值的文档 [1 , 2, 3, 4, 5]。
我面临的问题是查询将返回与Field_Name_1 中的值有些匹配的文档,但我只需要返回与Field_Name_1 的值完全匹配的文档。通过研究,我相信我应该将 Field_Name_1 设为关键字字段,而不是文本字段,因为我永远不需要通过提供 Field_Name_1 的确切值来运行此查询。
我是否认为我需要创建一个新索引并将Field_Name_1 设置为关键字,然后重新索引?我以前没有重新索引过,所以如果我做得不好,我担心会丢失数据。有没有办法以 Field_Name_1 作为文本字段来执行此查询?
这是我尝试过的两个查询,但它们都返回相同的结果。唯一的区别是第一个查询返回的“max_score”为 9.54,而第二个查询返回的“max_score”为 0。
GET Index_Name/_search
{
"query": {
"bool": {
"must": {
"match": {
"Field_Name_1": "12345-1234-1234-1234-d123f123g123"
}
},
"filter": {
"terms": {
"Field_Name_2": [
1,
2,
3,
4,
5
]
}
}
}
},
"track_total_hits": true
}
GET Index_Name/_search
{
"query": {
"bool": {
"filter": [
{
"match": {
"Field_Name_1": "12345-1234-1234-1234-d123f123g123"
}
},
{
"terms": {
"Field_Name_2": [
1,
2,
3,
4,
5
]
}
}
]
}
},
"track_total_hits": true
}
【问题讨论】:
-
可以分享一下你的index和你的ES版本的映射关系吗? curl -X "GET" "localhost:9200/yourindex/_mappings"
-
@JuanCarlosAlafita 当然。 Field_Name_1 是这样的, "store_id" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } } 索引的整个映射太大了,不能放在这里。
标签: amazon-web-services elasticsearch lucene kibana aws-elasticsearch