Lassen Sie mich meine Frage mit einem Beispiel erklären. Nehmen wir an, ich habe drei verschiedene Arten von Dokumenten mit einigen gemeinsamen Feldern, d. H.% Co_de%
book, song, magazin
usw. name, author, publisher, pageNumber
usw. name, singer, publisher, length
etc. Wie Sie sehen, sind die Felder name und publisher allgemeine Felder für alle drei Dokumenttypen. pageNumber ist sowohl im Magazin als auch im Buch enthalten. Und der Rest der Felder ist unabhängig von anderen Arten von Dokumenten.
Ich werde diese Daten auf demselben Index speichern. Ich kann diese Daten entweder speichern,
mit einem einzelnen Typ wie Objekt mit einem name, company, publisher, pageNumber
( Buch ) Lied , Magazin ) Feld darin. Ich gebe Mapping-Details an, wenn der Index erstellt wurde. Also, in dieser Option Buch wird Länge Feld haben, aber es wird leer sein, da es kein Buch-Feature ist.
oder drei Arten von Dokumenten im Feld _type.
Meine Abfragen und Facetten werden in allgemeinen Feldern angezeigt. Welcher der folgenden Ansätze hätte weniger Abfrage- und Facettenzeiten?
Ist category
effizienter als
/index/book,song,magazin/ -d {myQuery}
?
Danke für die Antworten.
Elasticsearchs Typenkonzept existiert in Lucene nicht.
Beim Indizieren von Dokumenten wird der Dokumenttyp indiziert. Wenn Sie dann nur nach bestimmten Typen suchen, fügt Elasticsearch Ihrer Abfrage implizit einen Filter für den indizierten Typ hinzu.
Bei Ihrem letzten Ansatz würden Sie also Ihren category
-Filter zusätzlich zum impliziten _type:object
-Filter haben. Im Wesentlichen gewinnen Sie nichts, wenn Sie die Typen von Elasticsearch nicht verwenden.
Tags und Links mapping elasticsearch