i running query problem elasticsearch. have objects looks this:
{ "id":"1234", "tags":[ { "tagname": "t1", "tagvalue":"v1"}, { "tagname": "t2", "tagvalue":"v2"}, { "tagname": "t3", "tagvalue":"v3"} ] } { "id":"5678", "tags":[ { "tagname": "t1", "tagvalue":"x1"}, { "tagname": "t2", "tagvalue":"x2"} ] }
and list of tagvalues tagname=t1, "v1" , "x1". tried
{ "filter": { "bool": { "must": [ { "term":{ "tags.tagname": "t1" } } ] } }, "facets": { "tagvalues":{ "filter": { "term": { "tags.tagname": "t1" } }, "terms": { "field": "tags.tagvalue", "size": 30 } } } }
it seems it's returning tagvalues tags "t1", "t2", , "t3".
can please me query? how can faceted list objects that's in array?
any appreciated.
thank you,
the main idea use nested
type tags
field. here mapping should use:
curl -xput localhost:9200/mytags -d '{ "mappings": { "mytag": { "properties": { "id": { "type": "string" }, "tags": { "type": "nested", "properties": { "tagname": { "type": "string", "index": "not_analyzed" }, "tagvalue": { "type": "string", "index": "not_analyzed" } } } } } } }'
then can reindex data , run query 1 below, first filter document containing tagname
value t1
, using aggregations
(don't use facets anymore deprecated), can again select tags tagname
t1
, retrieve associated tagvalue
fields. expected v1
, x1
values.
curl -xpost localhost:9200/mytags/mytag/_search -d '{ "size": 0, "query": { "filtered": { "filter": { "nested": { "path": "tags", "query": { "term": { "tags.tagname": "t1" } } } } } }, "aggs": { "tags": { "nested": { "path": "tags" }, "aggs": { "values": { "filter": { "term": { "tags.tagname": "t1" } }, "aggs": { "values": { "terms": { "field": "tags.tagvalue" } } } } } } } }'
Comments
Post a Comment