J'ai un problème avec l'agrégation imbriquée dans Elasticsearch. J'ai la cartographie avec le champ imbriqué:Elasticsearch. Agrégation de termes sur un champ imbriqué avec des valeurs dupliquées
POST my_index/ my_type/_mapping
{
"properties": {
"name": {
"type": "keyword"
},
"nested_fields": {
"type": "nested",
"properties": {
"key": {
"type": "keyword"
},
"value": {
"type": "keyword"
}
}
}
}
}
Puis-je ajouter un document à l'index:
POST my_index/ my_type
{
"name":"object1",
"nested_fields":[
{
"key": "key1",
"value": "value1"
},
{
"key": "key1",
"value": "value2"
}
]
}
Comme vous le voyez, dans mon tableau imbriqué j'ai deux éléments, qui ont la même domaine key
, mais différent value
champ. Ensuite, je veux faire une telle requête:
GET/my_index/my_type/_search
{
"query": {
"nested": {
"path": "nested_fields",
"query": {
"bool": {
"must": [
{
"term": {
"nested_fields.key": {
"value": "key1"
}
}
},
{
"terms": {
"nested_fields.value": [
"value1",
"value2"
]
}
}
]
}
}
}
},
"aggs": {
"agg_nested_fields": {
"nested": {
"path": "nested_fields"
},
"aggs": {
"agg_nested_fields_key": {
"terms": {
"field": "nested_fields.key",
"size": 10
}
}
}
}
}
}
Comme vous le voyez, je veux trouver tous les documents qui ont au moins un objet dans le tableau nested_field
, avec key
propriété égale à key1
et l'une des valeurs fournies (value1
ou value2
). Ensuite, je veux regrouper les documents fondés par nested_fields.key
. Mais j'ai une telle réponse
{
"took": 13,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.87546873,
"hits": [
{
"_index": "my_index",
"_type": "my_type",
"_id": "AVuLNXxiryKmA7VEwOfV",
"_score": 0.87546873,
"_source": {
"name": "object1",
"nested_fields": [
{
"key": "key1",
"value": "value1"
},
{
"key": "key1",
"value": "value2"
}
]
}
}
]
},
"aggregations": {
"agg_nested_fields": {
"doc_count": 2,
"agg_nested_fields_key": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "key1",
"doc_count": 2
}
]
}
}
}
}
Comme vous le voyez de la réponse, j'ai un coup (il est correct), mais le document a été compté deux fois dans l'agrégation (voir doc_count: 2
), parce qu'il a deux éléments avec ' key1 'valeur dans nested_fields
tableau. Comment puis-je obtenir le bon nombre d'agrégation?
C'est le nombre exact, puisque chaque élément imbriqué est un document dans son propre droit. Donc, vous avez vraiment deux documents imbriqués qui ont la clé key1 comme valeur et la valeur value1 ou value2 comme valeur. – Val
Oui j'ai besoin de ça. Comment puis-je surmonter ce problème? – Stalso
cela aide-t-il https://stackoverflow.com/a/27578607/7379424? –