Elasticsearch: agregação em objetos aninhados filtrados para encontrar valores exclusivos
Eu tenho uma matriz de objetos (tags) em cada documento no Elasticsearch 5:
{
"tags": [
{ "key": "tag1", "value": "val1" },
{ "key": "tag2", "value": "val2" },
...
]
}
Agora, quero encontrar valores de tag exclusivos para uma determinada chave de tag. Algo semelhante a esta consulta SQL:
SELECT DISTINCT(tags.value) FROM tags WHERE tags.key='some-key'
Eu vim para este DSL até agora:
{
"size": 0,
"aggs": {
"my_tags": {
"nested": {
"path": "tags"
},
"aggs": {
"filter" : { "terms": { "tags.key": "tag1" } },
"aggs": {
"my_tags_values": {
"terms" : {
"field" : "tags.value",
"size": 9999
}
}
}
}
}
}
}
Mas está me mostrando este erro:
[terms] unknown field [tags.key], parser not found
.
Essa é a abordagem correta para resolver o problema? Obrigado pela ajuda.
Nota: Eu declarei otags
campo como um campo aninhado no meu mapeamento.