Как получить больше от Lucene.net - PullRequest
6 голосов
/ 10 февраля 2009

Я пытаюсь включить Lucene.net в свой веб-поиск.

В настоящее время у меня есть индекс lucene.net, который содержит +1 миллион документов с 7 полями в каждом. Последнее поле является полем «все», в котором содержится содержимое предыдущих полей. Поиск по всему полю просто ЧРЕЗВЫЧАЙНО быстр:)

Но я чувствую, что здесь можно найти больше. Как я могу выполнить поиск, который ищет одну или несколько строк, разделенных пробелом, по всем полям без использования поля «all»?
Я хочу быть в состоянии дать вес для определенных полей. Кроме того, было бы очень хорошо, если бы поиск содержал информацию о том, ГДЕ произошло попадание, чтобы я мог показать ее в результате.

Я думаю, что это все возможно, но я не знаю, как это сделать.
Любая помощь?

Ответы [ 3 ]

4 голосов
/ 10 февраля 2009

Мы делаем что-то похожее, трюк в том, чтобы указать поля в строке запроса:

(+Tier1:ribbon^1)^4 OR (+Tier2:ribbon^1)^4 OR (+Tier3:ribbon^1) OR (+Tier4:q*ribbon*^1)^12

В приведенном выше примере пользователь искал «ленточку» в нашем приложении. У нас есть разные сегменты данных в разных полях, и последнее поле "Tier4" содержит все предыдущие термины, объединенные вместе. Мы добавляем в поле «q», чтобы мы могли использовать символы подстановки, также:

(+Tier4:q*ribbon*^1)^12

Наконец, мы используем бусты с кареткой (^). Это заканчивает тем, что взвешивало вещи по-другому. Потребовалось некоторое время, чтобы получить правильное повышение, и я все еще не на 100% доволен ими, но они действительно оказывают большое влияние.

3 голосов
/ 02 марта 2009

Я не думаю, что вам нужно поддерживать поле "все".

  1. Ознакомьтесь с использованием MultiFieldQueryParser. Вместо того чтобы брать одно поле по умолчанию для использования анализатором запросов, он принимает массив имен полей (в дополнение к анализатору индекса).
  2. Увеличение терминов должно работать в соответствии с «QueryParser» (т.е. никаких специальных действий не требуется). Я должен добавить, что мне показалось, что стандартный подсчет очков мне подходит (длина поля, количество совпадений и т. Д.) Без использования расширенных терминов.
  3. Lucene.Net (ну, конечно, сейчас SVN 2.3 собирается) включает в себя порт пакета Highlight из источника Java. У него есть несколько причуд (не в последнюю очередь из-за того, что это может быть сложно начать работу в первую очередь), но в основном это работает.

Удачи

1 голос
/ 10 февраля 2009

Вы должны получить Lucene в действии . Что касается оригинальной (то есть Java) реализации Lucene, она содержит всю необходимую информацию: о бустах, маркерах, парсерах qwery и т. Д.

...