我有一个如下所示的elasticsearch索引集合,
"_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"与上面的文档匹配。
key_id
"value"
key_id='1'
value = "30-05-2018"
我尝试将其映射为嵌套对象,但是无法编写查询来搜索2个或更多key_id匹配其各自值的查询。
这就是我要做的。您需要通过bool/filter(或bool/must)两个嵌套查询对每个条件对进行AND 运算,因为您要匹配同一父文档中的两个不同的嵌套元素。
bool/filter
bool/must
{ "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 } } ] } } } } ] } } }