2012-07-03 4 views
6

Wenn ich einen Analysator mit edgengram verwenden (min = 3, max = 7, vorne) + term_vector = with_positions_offsetsElasticsearch - EdgeNgram + Highlight + term_vector = schlecht Highlights

Mit Dokument mit Text = "CouchDB"

Wenn ich für "couc" suchen

Mein Highlight ist auf "Cou" und nicht "couc"


Es scheint, mein Highlight nur auf dem minimalen Anpassungs Token "Cou" ist w hile würde ich erwarten, auf dem genauen Token zu sein (wenn möglich) oder zumindest der längste Token gefunden.

Es funktioniert gut, ohne den Text mit term_vector Analyse = with_positions_offsets

Welche Auswirkungen die term_vector des Entfernens = with_positions_offsets für perfomances?

+0

Niemand hat eine Lösung oder Antwort über die Auswirkungen von with_positions_offsets? –

Antwort

8

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.

+0

Danke, also kenne ich den Leistungseinfluss jetzt. Hoffe, dass jemand dieses Verhalten erklären kann. Vielleicht liegt es daran, dass die Ngram-Logik auch auf die Suchanfrage angewendet wird, obwohl dies nicht der Fall sein sollte? –

+1

Ich habe nicht darüber nachgedacht, ja, es macht Sinn. Normalerweise haben Sie für Ngrams eine andere Analysekette zur Abfragezeit, ohne Ngramme.Andernfalls machen Sie auch Ngrams der Abfrage und Sie erhalten viel mehr Ergebnisse als erwartet und seltsame Verhaltensweisen. – javanna

+0

ok danke ich sollte das dann probieren;) –

4

Ich weiß, diese Frage ist alt, aber es war noch nicht beantwortet vollständig:

Es gibt eine andere Option ist, die auf eine solche seltsame Verhalten ergeben kann:

Sie haben require_field_match zu true setzen, wenn Sie möchten nicht, dass andere Ergebnisse von Dokumenten die aktuelle Hervorhebung von Dokumenten beeinflussen sollten, siehe: http://www.elasticsearch.org/guide/reference/api/search/highlighting/

+0

require_field_match geht nur über Feldnamen, ich glaube nicht, dass es sich um diesen Fall handelt. Ich meine, wenn Sie eine Abfrage auf das Titelfeld haben und Titel und Beschreibung markieren, werden die übereinstimmenden Begriffe im Beschreibungsfeld nicht hervorgehoben, während sie standardmäßig sind. – javanna

Verwandte Themen