Ich suche nur nach paar Feldern, aber ich möchte in der Lage sein, das gesamte Dokument in ES zu speichern, um nicht zusätzliche DB (MySQL) -Abfragen zu machen.Wie Sie Daten in elasticsearch _source speichern, aber nicht indizieren?
Ich habe versucht, index: no
, store: no
zu ganzen Objekten/Eigenschaften im Mapping hinzuzufügen, aber ich bin immer noch nicht sicher, ob die Felder indiziert werden und unnötigen Overhead hinzufügen.
Sagen wir, ich habe Bücher und jeder hat einen Autor. Ich möchte nur nach Buchtitel suchen, möchte aber das gesamte Dokument abrufen können.
Ist das in Ordnung:
mappings:
properties:
title:
type: string
index: analyzed
author:
type: object
index: no
store: no
properties:
first_name:
type: string
last_name:
type: string
Oder sollte ich lieber tun:
mappings:
properties:
title:
type: string
index: analyzed
author:
type: object
properties:
first_name:
index: no
store: no
type: string
last_name:
index: no
store: no
type: string
Oder vielleicht ist es völlig falsch, ich tue? Und was ist mit nested
Eigenschaften, die nicht indiziert werden sollten?
Bedeutet '" index ":" no "' impliziere '" store ":" no "'? Ich habe 'store' gelesen, was bedeutet, dass die' _source' der ursprünglichen Eigenschaft in Lucene gespeichert wird, aber ich bin mir nicht sicher, wie es mit 'index' zusammenhängt. Und nur um sicher zu gehen - muss ich nicht Mappings für die nicht indizierten Felder bereitstellen? ES wirft keine Fehler, wenn ich ein Dokument mit der Eigenschaft X, die ein int ist und dann ein Dokument mit der gleichen Eigenschaft, aber mit Zeichenfolge? – pinkeen
Nein, die Einstellung für den Index bestimmt nicht die Einstellung für den Speicher. Der Standardwert für store ist no, was in Ihrem Anwendungsfall gut ist, da die _source aktiviert ist. Wenn Sie das Feld _source deaktiviert haben und die Felder auswählen, die Sie speichern möchten, werden die gespeicherten Felder nur in den Suchergebnissen zurückgegeben, wenn eine Übereinstimmung besteht.Sie müssen eine Zuordnung für nicht indizierte Felder angeben, um Elasticsearch zu veranlassen, sie nicht zu indizieren, andernfalls verwendet Elasticsearch den Standardanalysator (Standard Analyzer), um das Feld zu indizieren. –
Im obigen Beispiel werden die dynamischen Vorlagen jedoch für die Zuordnung nicht indizierter Felder verwendet. Wenn Sie kein Mapping für ein Feld haben, wird kein Fehler zurückgegeben, wenn Sie den Typ einer Eigenschaft ändern. –