agrégation de termes elasticsearch avec filtrage


Egor Lebedev

J'ai des entités comme celle-ci dans l' fooindex:

{ids: ["aa", "bb"]}
{ids: ["aa", "cc"]}
{ids: ["ee"]}
{ids: ["ff" , "cc"]}

Fondamentalement, je veux savoir s'il existe des documents pour les identifiants aaet les fichiers ee. J'ai essayé de le faire avec l'agrégation des termes

{
    "size": 0,
   "query": {
      "bool": {
        "should": [
             {
                  "terms": {
                    "ids": [
                      "aa", "ee"
                    ],
                    "boost": 1
                 }
              }
           ],
           "adjust_pure_negative": true,
           "boost": 1
         }
      },
  "aggregations": {
    "byid": {
      "terms": {
        "field": "ids",
        "min_doc_count": 1
      }
    }
  }
}

mais le problème ici qu'en réponse, j'ai également obtenu une agrégation avec d'autres idsentités sélectionnées, et il y en a beaucoup dans le cas réel, donc l'agrégation pour idscela qui m'intéresse ne peut pas venir en réponse et je pense qu'il n'y a pas éléments pour eux (mais en fait il y en a, mais pas en réponse à cause de la limite de taille des termes)

Je pourrais le faire pour chaque idséparément sans aggs juste obtenir un count, mais il y en a beaucoup et ce sera très cher.

Elasticsearch Ninja

Sur la base du chat, il a été constaté qu'aucun des documents contenant les identifiants ne sont requis, par conséquent, l'agrégation n'est pas requise, maintenant si un identifiant particulier est présent ou non dans le résultat de la recherche est le principal problème.

il existe plusieurs approches:

  1. Utilisez multi_search avec un seul identifiant dans chaque sous-requête
  2. Utilisez une seule demande de recherche avec tous les identifiants, mais effectuez un post-traitement à l'aide d'un script ou d'un filtrage source et d'un identifiant de recherche dans la réponse.

Articles connexes


Elasticsearch - Champ imbriqué d'agrégation de termes

khld788: J'ai le problème suivant. J'ai un champ imbriqué ("liste") avec 2 propriétés (fieldB & fieldC). Voici à quoi ressemble un document: "fieldA: "1", "list": [ {"fieldB": "ABC", "fieldC": "DEF"}, {"fieldB": "ABC", "fieldC": "GHI"}, {"fieldB": "U

Elasticsearch: agrégation avec filtrage par horodatage

DilTeam J'ai besoin d'une liste d' identifiants distincts pour un jour particulier. J'essaye d'utiliser «Agrégations» avec «Filtrage». J'ai essayé plusieurs façons mais cela ne fonctionne pas. Quel est le format correct? { "size": "1000", "_source":

clés de sortie d'agrégation de termes elasticsearch

user3658423 Supposons que j'ai un document comme doc :{ item: {name: "Movie1", code: "M1"} } Je peux simplement utiliser l' termsagrégation sur item.code et obtenir tous les seaux. Mais, est-il possible d'utiliser l'agrégation sur item.codemais obtenir la

L'agrégation de termes Elasticsearch ignore certaines entrées

utilisateur2291296 Nous utilisons Elasticsearch pour collecter des statistiques SQL. Une fois, nous avons remarqué que certaines entrées n'apparaissent pas dans les agrégations. Voici un exemple de requête (générée à l'origine par kibana) : POST /_msearch {"i

Agrégation imbriquée Elasticsearch avec agrégation de plages

Ravindra Yadav Je suis très nouveau sur ElasticSearch et j'essaie de comprendre une situation dans laquelle je dois afficher des données JSON particulières d'Elasticsearch. Veuillez voir le code ci-dessous def bucket_for_order_amount(buckets, aggregations)