Lucene - поиск нескольких терминов в разных областях - PullRequest
1 голос
/ 08 октября 2009

У меня есть индекс Lucene, который заполняет базу данных. Я сохраняю / индексирую некоторые поля, а затем добавляю поле FullText, в котором я индексирую содержимое всех других полей, чтобы я мог выполнить общий поиск.

Теперь допустим, у меня есть документ со следующими двумя полями: fld1 - «Samsung выпускает новый 22-дюймовый ЖК-экран» fld2 - "Батареи телефона Sony Ericsson взрываются"

Если пользователь делает «телефон Samsung», он, вероятно, просто хочет получить новости о телефонах Samsung, не документ с информацией об экране Samsung и телефоне Sony, но поиск по полю FullText, я получу это как действительное результат. Есть хороший способ справиться с этим?

Я думал об индексации с использованием некоторого разделителя и создании SpanNotQuery, поэтому в поле FullText будет содержаться следующее: «Samsung выпускает новый 22-дюймовый ЖК-экран. MYLUCENESEPARATOR. Аккумуляторы телефона Sony Ericsson разрываются», а затем выполняются запросы SpanNotQuery с MYLUCENESEPARATOR в качестве бездействия

Это хорошее решение? Хорошо ли оно масштабируется с более чем двумя терминами? Я боюсь, что это будет убийца производительности. Есть ли лучший способ добиться этого?

1 Ответ

2 голосов
/ 08 октября 2009

Если количество полей ограничено, вы можете поместить две строки описания в два разных поля. Затем вы можете использовать MultiFieldQueryParser для поиска по этим полям. Поскольку это два отдельных поля, документ будет совпадать только в том случае, если оба термина отображаются в одном поле с оператором AND.

Давайте возьмем ваш пример. fld1 - «Samsung выпускает новый 22-дюймовый ЖК-экран» fld2 - «Батареи телефона Sony Ericsson взрываются»

Если они проиндексированы в отдельных полях fld1 и fld2, ваш запрос становится

(+fld1:samsung +fld1:phone) (+fld2:samsung +fld2:phone)

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

...