Étant donné un ensemble de documents qui ont une valeur donnée dans un champ, je veux savoir combien de documents ont chaque valeur pour un deuxième champ.
J'ai essayé de le faire avec une agrégation de termes avec la requête suivante:
{
"size": 0,
"filter": {
"term": {
"field1": "value"
}
},
"aggregations": {
"field2" : {
"terms" : { "field" : "field2" }
}
}
}
mais les décomptes renvoyés montrent le nombre de documents avec chaque valeur pour le deuxième champ dans le index entier, et non limité aux documents avec une valeur donnée pour le premier champ.
Qu'est-ce que je fais mal?
Avez-vous essayé d'utiliser une requête filtrée?
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {
"field1": "value"
}
}
}
},
"aggregations": {
"field2": {
"terms": { "field": "field2" }
}
}
}
Il y a une comparaison ici: https://www.elastic.co/guide/en/elasticsearch/guide/current/_post_filter.html
En bref, votre filtre de niveau supérieur se comporte comme un post_filter dans le lien. Pour filtrer, puis calculer l'agrégat, vous devez utiliser une requête.
Si vous êtes préoccupé par les performances atteintes en raison du calcul des scores dans les requêtes, vous pouvez examiner les requêtes à score constant, qui sont essentiellement des requêtes de filtrage.