2014-09-09 11 views
20

Wenn man die Anzahl der Dokumente in einem Index zählen (von Elasticsearch), dann gibt es zwei Möglichkeiten (mindestens?):Zählen Anzahl von Dokumenten mit Elasticsearch

  • Direkt count

    POST my_index/_count

    sollte die Anzahl der Dokumente in my_index zurückgeben.

  • Mit search

    Hier kann man die count als search_type oder eine andere Art verwenden. zwischen den verschiedenen Ansätzen

    • was ist der Unterschied: In beiden Fällen kann die Gesamtzahl aus dem Bereich ['hits']['total']

    Meine Fragen sind extrahiert werden? Welchen sollte ich bevorzugen?

  • Ich stelle diese Frage, weil ich unterschiedliche Ergebnisse je nach der gewählten Methode erfahre. Ich bin gerade dabei, das Problem zu debuggen, und diese Frage tauchte auf.

Antwort

24

Wahrscheinlich _count ist etwas schneller, da sie nicht auszuführen hat eine vollständige Abfrage mit Ranking und führen zu holen und kann einfach die Größe zurückzukehren.

Es wäre interessant, ein bisschen mehr darüber zu wissen, wie Sie es schaffen, unterschiedliche Ergebnisse zu erzielen. Dafür benötige ich weitere Informationen, zB welche genauen Anfragen Sie senden und ob eine Indexierung im Index stattfindet.

Aber nehmen wir an, dass Sie die folgenden

  1. Index einige Dokumente
  2. aktualisieren den Index

_search und _count (mit einem Spiel alle query) tun sollten, die gleiche Gesamt zurück. Wenn nicht, wäre das sehr komisch.

+0

Leider kann ich die Daten nicht teilen.Da das Problem nicht zu 100% reproduzierbar war, wäre es außerdem schwierig, ein minimales Beispiel zu finden. Deshalb habe ich das als allgemeine Frage gestellt. – Dror

+0

werden die Daten natürlich nicht benötigen, nur anonymisieren. Aber die tatsächliche Anfrage + Antwort wäre nützlich. Ohne das wird es ziemlich schwer sein herauszufinden, was du falsch machst. –

+1

anscheinend _count api wird in es 2.0 aus Gründen der Redundanz veraltet, da Sie mit size = 0 suchen können –

2

Die beiden Abfragen liefern das gleiche Ergebnis, aber: - Anzahl verbraucht weniger Ressourcen/Bandbreite, da keine Dokumente, Scoring und andere interne Optimierungen abgerufen werden müssen. Stellen Sie die Suchgröße auf 0 ein, könnte sehr ähnlich sein.

Wenn Sie alle Datensätze in einem Index zählen möchten, können Sie auch eine Aggregationsbedingung für das Feld "_type" ausführen.

Die Ergebnisse sollten gleich sein. Stellen Sie vor dem Vergleich der Ergebnisse sicher, dass eine Indexaktualisierung ausgeführt wird.

+0

Die Begriffe Aggregation hat das Loch der Genauigkeit. Sie müssen eine große Größe festlegen, und sie wird immer von oben begrenzt durch 'MAX_INT' ... – Dror

Verwandte Themen