Es ist definitiv möglich, Elasticsearch zu dem einzigen Zweck zu verwenden, Daten zu aggregieren. Ich habe solche Setups ein paar Mal gesehen. Zum Beispiel würden wir in einem früheren Projekt Daten indexieren, aber wir würden nur Aggregationen ausführen, um Finanzberichte zu erstellen, und wir mussten selten Dokumente/Treffer abrufen. 99% der Anwendungsfälle waren einfach aggregierte Daten.
Wenn Sie einen solchen Anwendungsfall haben, können Sie dann abstimmen können Ihre Zuordnung zu
Die Rolle der enabled
ist zu entscheiden, ob Ihre Daten indiziert ist oder nicht. Es ist standardmäßig richtig, aber wenn Sie es auf false setzen, werden Ihre Daten einfach gespeichert (in _source
), aber vollständig von den Analysatoren ignoriert, dh es wird nicht analysiert, in Token umgewandelt und indiziert, und somit auch nicht Durchsuchbar, können Sie die _source
abrufen, aber nicht danach suchen. Wenn Sie Aggregationen verwenden müssen, muss enabled
wahr sein (der Standardwert).
Der Parameter legt fest, ob das Feld gespeichert werden soll oder nicht. Standardmäßig wird der Feldwert indiziert, aber nicht gespeichert, da er bereits mit der _source
selbst gespeichert wurde, und Sie können ihn mithilfe der Quellfilterung abrufen. Für Aggregationen spielt dieser Parameter keine Rolle.
Wenn Ihr Anwendungsfall nur über Aggregationen ist, könnten Sie versucht sein, _source: false
einzustellen, dh die _source
überhaupt nicht zu speichern, da Sie die Feldwerte nur indizieren müssen, um sie zu aggregieren, aber dies ist selten eine gute Idee for various reasons.
Also, um Ihre Hauptfrage zu beantworten, hängen Aggregationen vom Index ab, aber die für Aggregationen verwendeten (doc-) Werte sind in dedizierte Dateien geschrieben, deren innere Struktur viel performanter und optimaler ist als der Zugriff auf die Daten von Index, um Aggregationen zu erstellen.
Wenn Sie ES 1.x verwenden, stellen Sie sicher, dass doc_values
für alle Felder, auf die Sie aggregieren möchten, auf true festgelegt wird (außer analysierte Strings und boolesche Felder).
Wenn Sie ES 2.x verwenden, ist doc_values
standardmäßig true, Sie müssen also nichts Spezielles tun.
Update:
Es ist erwähnenswert, dass Aggregationen abhängig sind doc_values (dh Per Document Values.dvd
und .dvm
Lucene-Dateien), die im Wesentlichen wie in dem invertierten Index, der die gleichen Informationen enthält, aber in einer Säulen- organisiert orientierte Mode, die es für Aggregationen viel effizienter macht.
Danke für die Antwort. Aber ich verstehe immer noch nicht, wie Aggregationen vom Index abhängig sind, wenn sie Datenstrukturen auf Laufwerksebene verwenden. – farthVader
Ein Index besteht aus einer Menge von [mehreren Datenstrukturen auf Plattenebene, die in Dateien gespeichert sind] (https://lucene.apache.org/core/5_0_0/core/org/apache/lucene/codecs/lucene50/package-summary .html # Overview) :-) Einige von ihnen werden in den Heap geladen, einige werden in den Dateicache geladen, aber alles (einschließlich Aggregationen) wird letztendlich in einer Datenstruktur gespeichert, die sich in einer oder mehreren Dateien befindet. – Val
Das macht Sinn. Nur um klar zu sein, Aggregationen sind abhängig von dem Vorwärtsindex, im Gegensatz zum invertierten Index - der für die Suche ist. Aber beide Arten von Indizes existieren innerhalb des Segmentindex. Hört sich richtig an? – farthVader