Mit Elasticsearch können Sie Daten schnell und flexibel indexieren. Testen Sie es kostenlos in der Cloud oder führen Sie es lokal aus, um zu erfahren, wie einfach die Indizierung sein kann.
In diesem Artikel werden wir erläutern, wie man Felder eines Elasticsearch-Index anzeigt. Dies kann hilfreich sein, um die Struktur Ihrer Daten zu verstehen, bestimmte Felder zu identifizieren und Probleme zu beheben. Wir werden folgende Themen behandeln:
- Verwendung der
_mapping-API zum Abrufen von Feldinformationen - Verwendung der
_searchAPI zum Anzeigen von Feldwerten - Unterfelder anzeigen
- Synthetisches Feld „_source“
- Laufzeitfelder
1. Verwendung der _mapping-API zum Abrufen von Feldinformationen
Die _mapping API ermöglicht es Ihnen, die Mapping-Definition für einen oder mehrere Indizes abzurufen. Dies umfasst Informationen über die Felder, ihre Datentypen und weitere Eigenschaften. Um die Zuordnung für einen bestimmten Index abzurufen, verwenden Sie die folgende Anfrage:
Wenn Sie beispielsweise einen Index mit dem Namen my_index haben, können Sie dessen Zuordnung mit der folgenden Anfrage abrufen:
Die Antwort enthält die Mapping-Definition für den Index, die Informationen über die Felder und deren Eigenschaften enthält.
Es ist auch möglich, die Zuordnung eines bestimmten Feldes abzurufen. Dies kann nützlich sein, wenn Ihre Kartierung recht umfangreich ist und Sie sich nur auf ein bestimmtes Feld konzentrieren möchten. Um die Zuordnung eines bestimmten Feldes abzurufen, verwenden Sie die folgende Anfrage:
Sie können die Zuordnungen mehrerer Felder auch abrufen, indem Sie deren Namen durch Kommas trennen, wie in der folgenden Anfrage:
2. Verwenden der _search-API zum Anzeigen von Feldwerten
Um die Werte von Feldern in einem Elasticsearch-Index anzuzeigen, können Sie die _search API verwenden. Die _search API bietet Ihnen mehrere Möglichkeiten, die zurückgegebenen Felder zu steuern; die beiden wichtigsten sind:
_sourceDas Feld_sourceenthält den ursprünglichen JSON-Dokumentkörper genau so, wie er indexiert wurde, einschließlich aller Änderungen, die durch Ingestionspipelines oder Vorverarbeitungsschritte vorgenommen wurden. Um bestimmte Felder aus dem Quelldokument anzuzeigen, implementieren Sie eine Quellfilterung, wie wir im Folgenden sehen werden.fieldsMit dem Parameterfieldskönnen Sie beim Durchführen einer Suche bestimmte Felder aus Ihren Dokumenten auf Basis der Indexzuordnung abrufen. Im Gegensatz zu_sourcekannfieldsauch Werte aus gespeicherten Feldern, Dokumentwerten oder Laufzeitfeldern zurückgeben, ohne auf_sourcezu verweisen. Für Standardfelder ohne Dokumentwerte oder gespeicherte Einstellungen wird jedoch auf_sourcezurückgegriffen. Dies kann viele Vorteile mit sich bringen, wie zum Beispiel eine höhere Leistungsfähigkeit und mehr, wie wir im Folgenden sehen werden.
Verwendung des Feldes _source
Standardmäßig gibt die _search -API das Feld _source zurück, welches das ursprüngliche, indizierte JSON-Dokument enthält. Um bestimmte Felder anzuzeigen, können Sie Filter im Parameter _source der Suchanfrage hinzufügen; dies wird als Quellfilterung bezeichnet.
Hier ist ein Beispiel für eine Suchanfrage, die die Werte der Felder title und author für Dokumente im Index my_index zurückgibt:
In diesem Beispiel gibt der Parameter _source die zurückzugebenden Felder an.
Falls Sie noch mehr Kontrolle benötigen, können Sie die Eigenschaften includes und excludes des Objekts _source verwenden. Beispielsweise gibt die folgende Abfrage das Feld der obersten Ebene title und alle Unterfelder von author außer author.description zurück.
In diesem Beispiel verwenden wir das Muster author.* , um jedes direkte Unterfeld des Objekts author abzurufen. Dann schließen wir author.description explizit aus, sodass nur die übrigen Autorenfelder zurückgegeben werden. Beachten Sie, dass dies keine Leistungsverbesserungen mit sich bringt, da das Quell-JSON weiterhin geladen und analysiert werden muss, aber es kann die Größe der über das Netzwerk gesendeten Antwort verringern.
Verwendung des Parameters „fields“
Mit dem Parameter fields können Sie die in der Suchergebnisseinduktion zurückgegebenen Felder filtern. Die Verwendung fields anstelle von _source bietet mehrere Vorteile, darunter:
- Verbesserte Performance:
fieldskann Werte direkt aus gespeicherten Feldern oder Dokumentwerten zurückgeben, ohne die vollständige_sourceladen zu müssen, wodurch die Größe der Antwortnutzlast kleiner wird. - Formatierte Ausgabe: Bei Standardfeldern kann
fieldsauf_sourcezurückgreifen, um die Werte zu erfassen. Dabei wird jedoch die Indexzuordnung herangezogen, um die Ausgabe korrekt zu formatieren, z. B. formatierte Datumsangaben, sodass sie mit den für Aggregationen und Sortierungen verwendeten Formaten konsistent sind. - Zugriff auf Laufzeitfelder:
fieldskann Laufzeitfelder zurückgeben, die im ursprünglichen_sourcenicht existieren. - Weitere Vorteile finden Sie hier.
Um beispielsweise nur die Felder title und author im Index my_index zurückzugeben, können Sie die folgende Suchanfrage verwenden:
In der obigen Abfrage setzen wir das Feld _source auf false, damit wir das Quelldokument nicht zurückgeben. Dadurch kann die Nutzlastgröße der Antwort drastisch reduziert werden. Beachten Sie jedoch, dass dies nur funktioniert, weil die Felder title und author vom Feldtyp keyword sind, bei dem standardmäßig doc_values aktiviert ist. Wenn das Feld doc_values nicht aktiviert hat und _source auf false gesetzt ist, hat Elasticsearch keine Möglichkeit, diese abzurufen, und sie werden in der Antwort übersprungen.
Wichtig zu beachten ist, dass die fields -Antwort immer ein Array von Werten für jedes Feld zurückgibt, selbst wenn es nur einen einzigen Wert gibt. Dies liegt daran, dass Elasticsearch keinen dedizierten Array-Typ besitzt und jedes Feld mehrere Werte haben kann. Für weitere Informationen zu Arrays in Elasticsearch klicken Sie hier.
Weitere Möglichkeiten zum Abrufen von Feldern
Obwohl das Abrufen von Feldern mit _source oder fields die empfohlenen Methoden sind, stehen für bestimmte Anwendungsfälle verschiedene Methoden zur Verfügung, wie zum Beispiel:
Doc-Wertfelder: Wenn Sie _source komplett vermeiden möchten, können Sie mit dem Parameter docvalue_fields suchen. Doc-Werte speichern die gleichen Feldwerte wie _source , jedoch in einer auf der Festplatte gespeicherten Datenstruktur, die für Sortierung und Aggregation optimiert ist.
Da es sich um separate Werte handelt, die nicht mit _source gespeichert sind, können Sie bestimmte Felder anfordern, ohne das gesamte _source zu laden. Dies ist nützlich, wenn Sie große Dokumente abfragen, aber nur wenige kleine Felder benötigen, die Dokumentwerte unterstützen. Ein weiterer Anwendungsfall für docvalue_fields besteht darin, dass Sie eine benutzerdefinierte Formatierung für die Felder date und numeric verwenden möchten, wie wir im folgenden Beispiel sehen werden.
Beachten Sie, dass dies nur für Felder funktioniert, für die Sie doc_values aktivieren, oder für Feldtypen, bei denen dies standardmäßig aktiviert ist, wie z. B. keyword, date, numerische Typen und boolean, nicht für text oder annotated_text.
In diesem Beispiel verwenden wir den Parameter docvalue_fields , um die Felder title, author und published abzurufen, ohne das vollständige Dokument _source zu laden:
Wenn diese Abfrage ausgeführt wird, greift Elasticsearch direkt auf die Werte in seinem spaltenorientierten Speicher auf der Festplatte zu, anstatt für jedes Dokument auf _source zu verweisen. Das Feld published wird dank des in der Abfrage angegebenen Parameters format im Format epoch_millis anstatt im Standardformat zurückgegeben.
Gespeicherte Felder: Wenn Sie in der Zuordnung explizit bestimmte Felder als gespeichert markiert haben, können Sie mit dem Parameter stored_fields nach diesen Feldern filtern. Dies ist nützlich, wenn Sie kurze Antworten nur mit diesen spezifischen Feldern wünschen oder Felder, die Sie absichtlich zum späteren Abruf gespeichert haben. Es wird separat von _source gespeichert, daher ist diese Methode auch nützlich, um das Laden von _source zu vermeiden.
Wichtig zu beachten ist, dass diese Option standardmäßig deaktiviert und generell nicht empfehlenswert ist. Verwenden Sie stattdessen Quellfilter, um bestimmte Teilmengen des ursprünglichen Quelldokuments zurückzugeben.
In der folgenden Beispielabfrage verwenden wir den Parameter stored_fields , um das Feld summary abzurufen, das die Indexzuordnungskonfiguration ”store”: true hat.
Wenn diese Abfrage ausgeführt wird, prüft Elasticsearch, ob dieses Feld mit ”store”: true markiert wurde. Falls dies nicht der Fall ist, wird das Feld vollständig übersprungen.
3. Unterfelder anzeigen
Wenn Ihr Index Unterfelder enthält, können Sie die Punktnotation verwenden, um den Feldpfad im Parameter fields anzugeben. Beachten Sie, dass Unterfelder sich vom verschachtelten Feldtyp unterscheiden. Wenn Sie beispielsweise ein Unterfeld mit dem Namen address.city haben, können Sie es wie folgt in die Suchergebnisseinlösung einbinden:
In diesem Beispiel enthält die Suchergebnisseinsendung die Werte der Felder title, author und address.city .
4. Synthetische Quelle
Wenn Sie die Funktionalität der Verwendung von _source beibehalten, aber gleichzeitig Speicherplatz sparen möchten, haben Sie die Möglichkeit, in Ihrer Indexzuordnung synthetisches _source zu verwenden. Die Funktion Synthetic _source ermöglicht es Elasticsearch, die _source aus vorhandenen Daten wie gespeicherten Feldern und Dokumentwerten zu rekonstruieren, selbst wenn _source deaktiviert ist. Dadurch lässt sich viel Speicherplatz sparen, allerdings auf Kosten etwas geringerer Abfragegeschwindigkeiten, da die Rekonstruktion in Echtzeit erfolgt. Aktivieren Sie diese Funktion, indem Sie die folgenden Werte in Ihren Indexeinstellungen verwenden:
Zu den Vorteilen der Verwendung von synthetischem _source gehören: vollständige Dokumentanzeige bei Verwendung der _search API, Quellfilterung und Kompatibilität mit anderen Funktionen und Tools wie Kibana, die die Verfügbarkeit _source voraussetzen, und das alles, ohne dass das vollständige _source Dokument gespeichert werden muss.
5. Laufzeitfelder
Mit Laufzeitfeldern können Sie skriptgesteuerte Felder zur Abfragezeit oder in Ihrer Indexzuordnung unter einem Laufzeitblock definieren. Diese Felder werden nie indiziert, daher erhöht das Hinzufügen eines Laufzeitfelds nicht die Indexgröße, es wird aber niemals in _source angezeigt. Die in der Zuordnung definierten Laufzeitfelder sind persistent und für alle Abfragen verfügbar, während die zur Abfragezeit definierten Laufzeitfelder temporär sind und nur in dieser Suchanfrage verfügbar sind.
Der Hauptvorteil der Verwendung von Laufzeitfeldern besteht darin, dass man Felder zu Dokumenten hinzufügen kann, nachdem man sie bereits importiert hat, was die Zuordnungsentscheidungen vereinfacht. Laufzeitfelder eignen sich auch hervorragend, um Ihre Dokumente mit Werten anzureichern, die im Originaldokument nicht vorhanden sind, sondern mithilfe eines Skripts generiert werden, z. B. durch Formatieren einer Zeichenkette oder Berechnen einer Punktzahl.
Es ist außerdem zu beachten, dass Laufzeitfelder die Leistung beeinträchtigen können, da für jedes Dokument im Ergebnissatz ein Skript ausgeführt werden muss. Um ein Laufzeitfeld abzurufen, können Sie auch den Parameter fields der API _search verwenden.
Fazit
Die Anzeige von Feldern eines Elasticsearch-Index kann von der einfachen Abfrage von Werten mithilfe der Indexzuordnung oder _source bis hin zu fortgeschritteneren Methoden mit fields, docvalue_fields oder Laufzeitfeldern für mehr Kontrolle und Effizienz reichen. Das Verständnis der Vor- und Nachteile verschiedener Methoden ist der Schlüssel zur Optimierung Ihrer Sucherfahrung. Egal ob Sie Nutzdaten optimieren, Dokumente anreichern oder synthetische Daten _source verwenden, um Speicherplatz zu sparen, Elasticsearch bietet Ihnen zahlreiche Tools und Funktionen, um die benötigten Daten so zu finden, wie Sie sie benötigen. Mithilfe dieser Techniken können Sie die Struktur Ihrer Daten verstehen, bestimmte Felder identifizieren und Probleme beheben.




