Elasticsearch - Effizienz der Suche über mehrere Arten

8

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%

  • Buch hat book, song, magazin usw.
  • Lied hat name, author, publisher, pageNumber usw.
  • Magazin hat 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.

    
shyos 30.12.2013, 10:11
quelle

1 Antwort

8

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.

    
Alex Brasetvik 30.12.2013, 20:02
quelle

Tags und Links