2015-02-23 3 views
0

Можно ли указать, подходит ли порядок слов для поиска близости Lucene?Порядок слов в поиске близости Lucene

«слово1 слово2» ~ 3 => порядок слов имеет значение (заказовМои = истина)

есть эквивалентный способ записи запроса, для которой порядок не имеет значения? Что-то вроде:

«word1 WORD2» ~ 3x => порядок слов не имеет значения (заказовМои = ложь)

Я знаю, что для SpanNearQuery свойство заказовМои определяет, если вопросы порядка или нет но не как я могу сказать QueryParser, если InOrder должен быть истинным или ложным для определенного SpanNearQuery.

Должен ли я написать свой собственный QueryParser для этого, который поддерживает настраиваемый синтаксис для обработки таких запросов?

ответ

2

У вас есть это обратно. QueryParser всегда устанавливает InOrder в значение false.

InOrder = false нет, однако, значит заказ не имеет значения. Это означает, что порядок не поддерживается строго. Порядок по-прежнему имеет значение, поскольку значение близости является расстоянием левенштейна. Изменение порядка двух слов увеличивает расстояние на 2. Вы можете увидеть совпадения по обратному порядку, если попытаетесь увеличить расстояние на два.

Насколько вы можете структурировать свой запрос, чтобы установить, следует ли поддерживать порядок в парсере запроса: Нет. Вы не можете. Это не поддерживает.

Вы можете переключиться на использование Surround Query Parser, который предназначен для обработки более сложных запросов диапазона. Однако синтаксис много, и я не знаю, есть ли там .Net версия. Это было вокруг Lucene 3.0.3, но это был пакет Contrib тогда.

+0

Спасибо за ваш ответ! Я использую автопортретную .net-версию ComplexPhraseQueryParser, в которой InOrder всегда прав. Вот почему я предположил, что это будет поведение QueryParser по умолчанию. К сожалению, похоже, что Lucene.Net, а также Lucene.Net.Contrib не содержат пакет окружения. Так что, я думаю, мне придется либо дождаться выхода новой версии Lucene.Net, либо написать что-то вроде Surround QueryParser. – dennis

+0

Я только что протестировал свойство InOrder, и результаты показывают, что для InOrder = false порядок терминов действительно не имеет значения: «term1 term2» slop = 0 InOrder = true results in 9 hits, «term2 term1» slop = 0 InOrder = true results in 5 hits, «term1 term2» slop = 0 InOrder = false results in 14 хиты, "term2 term1" slop = 0 InOrder = false results in 14 hits, Или я что-то упускаю? – dennis

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