Aggrégation avec filtre

Bonjour,

j'ai essayé de faire une requête ES avec une aggregation, mais je n'ai pas le résultat que je veux.
c'est certainement ma requête n'est pas bonne.

voilà mon index:

DELETE test

PUT test
{
  "mappings": {
    "test": {
      "properties": {
        "id": {
          "type": "long"
        },
        "tags": {
          "properties": {
            "cnt": {
              "type": "long"
            },
            "id": {
              "type": "text",
              "fielddata": true,
              "fields": {
                "keyword": {
                  "type": "keyword"
                }
              }
            },
            "label": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword"
                }
              }
            }
          }
        },
        "title": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword"
            }
          }
        }
      }
    }
  }
}

POST _bulk
{ "index" : { "_index" : "test", "_type" : "test", "_id" : "1" } }
{ "id": 1, "title" : "cyber securité","tags": [{"id": "1","cnt": 8,"label": "categorie 1"},{"id": "2","cnt": 6,"label": "categorie 2"},{"id": "3","cnt": 4,"label": "categorie 3"}]}
{ "index" : { "_index" : "test", "_type" : "test", "_id" : "2" } }
{ "id": 2, "title" : "cybersécurité","tags": [{"id": "1","cnt": 8,"label": "categorie 1"},{"id": "2","cnt": 6,"label": "categorie 2"},{"id": "3","cnt": 4,"label": "categorie 3"}] }
{ "index" : { "_index" : "test", "_type" : "test", "_id" : "3" } }
{ "id": 3, "title" : "technicien bigdata","tags": [{"id": "1","cnt": 8,"label": "categorie 1"},{"id": "2","cnt": 6,"label": "categorie 2"},{"id": "3","cnt": 4,"label": "categorie 3"}] }
{ "index" : { "_index" : "test", "_type" : "test", "_id" : "4" } }
{ "id": 4, "title" : "fullstack","tags": [{"id": "1","cnt": 8,"label": "categorie 1"},{"id": "2","cnt": 6,"label": "categorie 2"},{"id": "3","cnt": 4,"label": "categorie 3"}] }
{ "index" : { "_index" : "test", "_type" : "test", "_id" : "5" } }
{ "id": 5, "title" : "aafullstack", "tags":[] }
{ "index" : { "_index" : "test", "_type" : "test", "_id" : "6" } }
{ "id": 6, "title" : "6fullstack", "tags":[] }
{ "index" : { "_index" : "test", "_type" : "test", "_id" : "7" } }
{ "id": 7, "title" : "7fullstack", "tags":[] }

ma requête:

GET test/_search
{
  "size": 0,
  "aggs": {
    "test": {
      "filter": {
        "range": {
          "tags.cnt":{
            "from": 4
          }
        }
      },
      "aggs": {
        "names": {
          "terms": {
            "field": "tags.id",
            "size": 10
          }
        }
      }
    }
  }
}

et le résultat:

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 7,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "test": {
      "doc_count": 4,
      "names": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [
          {
            "key": "1",
            "doc_count": 4
          },
          {
            "key": "2",
            "doc_count": 4
          },
          {
            "key": "3",
            "doc_count": 4
          }
        ]
      }
    }
  }
}

mais ce que je veux avoir en sortie:

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 7,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "test": {
      "doc_count": 4,
      "names": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [
          {
            "key": "3",
            "doc_count": 4
          }
        ]
      }
    }
  }
}

si quelqu'un peut m'aider !
merci

Je ne suis pas certain d'avoir compris la question malgré l'exemple.
Je me demande juste si ton "problème" vient du fait que tu utilises des objets dans un tableau. Les objets sont indexés à plat par défaut dans Elasticsearch, à moins que tu n'utilises spécifiquement le type nested dans le mapping pour le champ tags.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.