2012-07-03 2 views
6

Когда я использовать анализатор с edgengram (мин = 3, макс = 7, спереди) + term_vector = with_positions_offsetsElasticsearch - EdgeNgram + выделить + term_vector = плохие моменты

С документа, имеющего текст = "CouchDB"

Когда я искать «couc»

Моя изюминка на «Коу», а не «couc»


кажется, моя изюминка только на минимальном согласующего знак «Коу» ш hile, я бы ожидал, что на точном токене (если возможно) или, по крайней мере, на самом длинном найденном токене.

Он отлично работает без анализа текста с term_vector = with_positions_offsets

Что такое влияние удаления term_vector = with_positions_offsets для спектаклей?

+0

У любого решения нет ответа или ответа о влиянии with_positions_offsets? –

ответ

8

Когда вы устанавливаете term_vector=with_positions_offsets для определенного поля, это означает, что вы сохраняете термин «векторы на документ» для этого поля.

Когда речь заходит об подсветке, векторы векторов позволяют использовать ярко выраженный векторный маркер lucene, который быстрее, чем стандартный маркер. Причина в том, что стандартный маркер не имеет быстрого способа выделить, поскольку индекс не содержит достаточной информации (позиции и смещения). Он может только повторно анализировать содержимое поля, перехватывать смещения и позиции и делать подсветку на основе этой информации. Это может занять довольно много времени, особенно с длинными текстовыми полями.

Использование терминальных векторов у вас достаточно информации и не нужно пере анализировать текст. Недостатком является индекс, который заметно увеличится. Я должен добавить, что, поскольку векторы вектора Lucene 4.2 лучше сжимаются и сохраняются оптимизированным образом. И есть также новый PostingsHighlighter, основанный на способности хранить смещения в списке проводок, что требует еще меньше места.

elasticsearch автоматически использует лучший способ сделать выделение на основе имеющейся информации. Если сохраняются векторы вектора, он будет использовать быстрый векторный маркер, в противном случае стандартный. После переиндекса без векторов векторов выделение будет производиться с использованием стандартного маркера. Он будет медленнее, но индекс будет меньше.

Что касается полей ngram, описанное поведение является странным, поскольку быстрый векторный маркер должен иметь лучшую поддержку полей ngram, поэтому я ожидаю точно противоположный результат.

+0

Спасибо, поэтому я знаю влияние производительности сейчас. Надеюсь, кто-то сможет объяснить это поведение. Может быть, это потому, что логика ngram применяется к поисковому запросу, а это не должно? –

+1

Не думал об этом, да, это имеет смысл. Обычно для ngrams у вас есть другая цепочка анализа во время запроса, без ngrams.В противном случае вы также создаете ngrams запроса, и вы получите больше результатов, чем ожидалось, и странное поведение. – javanna

+0

ok спасибо, я должен попробовать это;) –

4

Я знаю, этот вопрос старый, но он еще не был полностью ответил :

Существует еще один вариант, который может дать такое странное поведение:

Вы должны установить require_field_match в true если вы не хотите, чтобы другие результаты документов влияли на выделение текущего документа, см.: http://www.elasticsearch.org/guide/reference/api/search/highlighting/

+0

require_field_match - это только имена полей, я не думаю, что это относится к этому случаю. Я имею в виду, что если у вас есть запрос в поле заголовка, и вы выделяете заголовок и описание, то совпадающие термины в поле описания не будут подсвечиваться, а по умолчанию они есть. – javanna

Смежные вопросы