Wenn Sie term_vector=with_positions_offsets
für ein bestimmtes Feld festlegen, bedeutet dies, dass Sie die Termvektoren pro Dokument für dieses Feld speichern.
Wenn es um Hervorhebung geht, erlauben Termvektoren die Verwendung des schnellen Vektor-Highlighters lucene, der schneller als der Standardmarker ist. Der Grund dafür ist, dass der Standard-Highlighter keine schnelle Hervorhebung bietet, da der Index nicht genügend Informationen (Positionen und Offsets) enthält. Es kann nur den Feldinhalt neu analysieren, Offsets und Positionen abfangen und basierend auf diesen Informationen markieren. Dies kann insbesondere bei langen Textfeldern einige Zeit dauern.
Mit Termvektoren haben Sie genügend Informationen und müssen den Text nicht erneut analysieren. Der Nachteil ist die Größe des Index, der deutlich zunehmen wird. Ich muss hinzufügen, dass seit Lucene 4.2 Termvektoren besser komprimiert und gespeichert werden. Und es gibt auch die neue PostsHighlighter basierend auf der Möglichkeit, Offsets in der Buchungsliste zu speichern, die noch weniger Platz benötigt.
elasticsearch verwendet automatisch den besten Weg, die Hervorhebung basierend auf den verfügbaren Informationen vorzunehmen. Wenn Termvektoren gespeichert werden, wird der schnelle Vektormarker verwendet, ansonsten der Standardvektor. Nachdem Sie ohne Termvektoren neu indiziert haben, wird die Hervorhebung mit dem Standard-Highlighter vorgenommen. Es wird langsamer, aber der Index wird kleiner.
In Bezug auf Ngram-Felder ist das beschriebene Verhalten seltsam, da schneller Vektor-Highlighter eine bessere Unterstützung für Ngram-Felder haben sollte, daher würde ich genau das entgegengesetzte Ergebnis erwarten.
Niemand hat eine Lösung oder Antwort über die Auswirkungen von with_positions_offsets? –