How to query for two fields in one and the same tuple in an array in ElasticSearch? -
let's there documents in index this:
{ "category":"2020", "properties":[ { "name":"foo", "value":"2" }, { "name":"boo", "value":"2" } ] }, { "category":"2020", "properties":[ { "name":"foo", "value":"8" }, { "name":"boo", "value":"2" } ] }
i'd query index in way return documents match "foo":"2"
but not "boo":"2"
.
i tried write query matches both properties.name
and properties.value
, i'm getting false positives. need way tell elasticsearch name , value have part of same properties tuple.
how can that?
you need map properties
nested
type. mapping similar this:
{ "your_type": { "properties": { "category": { "type": "string" }, "properties": { "type": "nested", "properties": { "name": { "type": "string" }, "value": { "type": "string" } } } } } }
then, query match documents having "foo=2"
in same tuple not "boo=2"
in same tuple need use nested
query accordingly, 1 below.
{ "query": { "bool": { "must": [ { "nested": { "path": "properties", "query": { "bool": { "must": [ { "match": { "properties.name": "foo" } }, { "match": { "properties.value": "2" } } ] } } } } ], "must_not": [ { "nested": { "path": "properties", "query": { "bool": { "must": [ { "match": { "properties.name": "boo" } }, { "match": { "properties.value": "2" } } ] } } } } ] } } }
Comments
Post a Comment