Elasticsearch mehrere Analysatoren für ein einzelnes Feld

Ich speichern verschiedener Arten von Dokumenten in einem einzigen index mit strengen vordefinierten mapping. Alle von Ihnen haben einige Feld (sagen wir, "Körper"), aber ich würde wollen, dass Sie analysiert werden geringfügig anders, wenn indiziert (z.B. die Verwendung verschiedener token Filter für bestimmte Dokumente) und Produkte verwendet und diese der gleichen Weise, während Sie suchte. Soweit ich weiß, Analysatoren können nicht angegeben werden, die pro Dokument.

Was ich auch überlegt:

  1. Objekt-Felder mit unterschiedlich analysiert Unterfelder für Dokument-Arten, so dass jedes Dokument hat nur eine gefüllt Unterfeld (wie "Körper.E-mail", "body.html"). Das problem ist, dass ich nicht die Suche auf das ganze "body" - Feld, die Aussehen würde, und durch alle seine Unterfelder (um nicht zu brechen die bestehende Applikation).
  2. Neue Reinkarnation von multi-Feldern (zu haben "body" - Feld mit einem generic-analyzer und custonly analysiert "E-mail", "html", etc. im inneren). Hovewer, ich bin mir nicht sicher, ob es möglich ist, um Sie direkt zu benutzen, während die Indizierung und indirekt während der Suche (z.B.,, Objekt speichern, mit {"mail":"smth"} für die Verwendung eines bestimmten index analyzer, dann Suche "query":{"body":"smth"} zu verwenden, Generika-Suche-analyzer).
  3. Zu trennen "Körper" in mehrere Felder mit unterschiedlichen Zuordnungen, entfernen Sie Sie aus _all, und legen Sie copy_to zu einem einzigen body Feld. Ich bin mir nicht sicher, aber es wird eine wesentliche index-overhead durch kopieren.
  • Warum nicht in Ihren index auf verschiedene Felder wie "E-mail", "html" etc. sind in einem anderen analyzer für jeden, und ein multi-match-Abfrage zur Suche auf allen diesen Gebieten? elastisch.co/guide/de/elasticsearch/Referenz/current/...
  • Meiner Meinung nach, diese beiden Anforderungen sind nicht möglich zusammen: search on the whole "body" field which would look through all its subfields (**to not break the existing application**) und analyzed slightly differently when indexed and treaten the same way while searched. Etwas hat zu geben.
  • Legacy-Gründen. Es gibt eine Menge von Suchanfragen auf diesem Gebiet bereits, so dass es schwer werden würde und boilerplate-anfällig zu ersetzen, jeder mit multi-match.
  • "copy_to zu einem einzigen body Feld" verwenden Sie den analyzer für die body Feld also, auch wenn Sie hatten verschiedene Analysatoren, die auf die Felder, die copy_to am Ende innen body erhalten Sie text analysiert, indem die body field analyzer.
InformationsquelleAutor Yuuri | 2015-06-19
Schreibe einen Kommentar