我有一个如下所示的弹性搜索索引集合,
"_index":"test",
"_type":"abc",
"_source":{
"file_name":"xyz.ex"
"metadata":{
"format":".ex"
"profile":[
{"date_value" : "2018-05-30T00:00:00",
"key_id" : "1",
"type" : "date",
"value" : [ "30-05-2018" ]
},
{
"key_id" : "2",
"type" : "freetext",
"value" : [ "New york" ]
}
}
现在,我需要通过将key_id与其值匹配来搜索文档. (key_id是一些字段,其值存储在“值”中)
防爆.对于key_id =’1’字段,如果其值=“ 30-05-2018”,则应与上述文档匹配.
我尝试将其映射为嵌套对象,但是我无法编写查询以使用2个或更多与其各自值匹配的key_id进行搜索.
最佳答案
这就是我要做的.您需要通过bool / filter(或bool / must)对每个条件对进行两个嵌套查询的AND运算,因为您要匹配同一父文档中的两个不同的嵌套元素.
{
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "metadata.profile",
"query": {
"bool": {
"filter": [
{
"term": {
"metadata.profile.f1": "a"
}
},
{
"term": {
"metadata.profile.f2": true
}
}
]
}
}
}
},
{
"nested": {
"path": "metadata.profile",
"query": {
"bool": {
"filter": [
{
"term": {
"metadata.profile.f1": "b"
}
},
{
"term": {
"metadata.profile.f2": false
}
}
]
}
}
}
}
]
}
}
}