我有一个弹性搜索索引集合,如下所示,
"_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
是某个字段,其值存储在"value"
)中
防爆。对于key_id='1'
字段,如果它是value = "30-05-2018"
,则应与上述文档匹配。
我尝试将其映射为嵌套对象,但我无法使用与其各自值匹配的2个或更多key_id
来搜索查询。
答案 0 :(得分:1)
我就是这样做的。您需要通过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
}
}
]
}
}
}
}
]
}
}
}