web-dev-qa-db-fra.com

Compter le nombre de documents utilisant Elasticsearch

Si l'on veut compter le nombre de documents dans un index (de Elasticsearch), il y a (au moins?) Deux possibilités:

  • Direct count

    POST mon_index/_count

    devrait renvoyer le nombre de documents dans my_index.

  • tilisation de search

    Ici, on peut utiliser le count comme le search_type ou un autre type. Dans les deux cas, le nombre total peut être extrait du champ ['hits']['total']

Mes questions sont:

  • quelle est la différence entre les différentes approches? Lequel devrais-je préférer?

  • Je soulève cette question parce que je vis des résultats différents selon la méthode choisie. Je suis en train de déboguer le problème, et cette question a surgi.

38
Dror

Probablement _count est un peu plus rapide car il n’est pas nécessaire d’exécuter une requête complète avec classement et récupération des résultats et peut simplement renvoyer la taille.

Il serait intéressant d’en savoir un peu plus sur la manière dont vous parvenez à obtenir des résultats différents. Pour cela, j'ai besoin de plus d'informations telles que les requêtes exactes que vous envoyez et si une indexation est en cours sur l'index.

Mais supposons que vous fassiez ce qui suit

  1. indexer des documents
  2. actualiser l'index

_search et _count (avec une correspondance avec toutes les requêtes) devrait renvoyer le même total. Sinon, ce serait très bizarre.

36
Jilles van Gurp

Les deux requêtes donnent le même résultat mais: - count consomme moins de ressources/de bande passante, car il n’est pas nécessaire d’extraire des documents, des scores et d’autres optimisations internes. Définir la taille de la recherche à 0, pourrait être très similaire.

Si vous souhaitez compter tous les enregistrements d'un index, vous pouvez également exécuter des conditions d'agrégation sur le champ "_type".

Les résultats devraient être les mêmes. Avant de comparer les résultats, veillez à exécuter une actualisation de l'index.

2
aparo