2013-03-09 1 views
3

Мне нужно, чтобы мои результаты поиска на основе Solr были найдены, если все ключевые слова для поиска отображаются в любом из полей поиска.Solr: Оператор OR по умолчанию возвращает нерелевантные результаты, когда поля запрашиваются с несколькими словами

Текущая ситуация:

пример поискового запроса: keywords: "berlin house john" name: "berlin house john" name" author: "berlin house john" name"

Давайте предположим, что есть только один результат, где ключевые слова = «дом», имя = «берлин», и автор = «джон» и нет другой возможной перестановки этих трех слов.

Если параметр по умолчанию OR, Solr возвращает простое OR-ing каждого ключевого слова в каждом поле, которое является огромным списком, где, конечно, наилучший результат сопоставления находится в первой позиции, но следующие результаты имеют очень небольшая релевантность (возможно, только одно совпадение полей), и они просто путают пользователя.

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

Условия поиска поступают в приложение с помощью ввода поиска, в котором пользователь пишет свободный текст - нет конкретных соглашений о языке (хэштеги или что-то еще).

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

+0

Вы можете исправить свой запрос ?, котировки выглядят не хорошо – iMysak

ответ

3

Если вам просто нужно, чтобы убедиться, появляются все слова во всех полях я бы предложил скопировать все соответствующие поля в одно поле в индексное время и запросить это вместо этого. Для этого вам нужно ввести новое поле, а затем использовать copyField для всех исходных полей, которые вы хотите скопировать. Чтобы скопировать все поля, используйте:

<copyField source="*" dest="text"/> 

См http://wiki.apache.org/solr/SchemaXml#Copy_Fields подробности.

Аналогичным подходом было бы использование булевой алгебры во время запроса. Это немного отличается от вышеупомянутого решения.

Ваш запрос должен выглядеть

(keywords:"berlin" OR keywords:"house" OR keywords:"john") AND 
(name:"berlin" OR name:"house" OR name:"john") AND 
(author:"berlin" OR author:"house" OR author:"john") 

, которые в основном гласят: один или несколько терминов должны соответствовать в ключевом слове и один или несколько терминов должны соответствовать в имени и один или несколько терминов должны соответствовать в автор.

+0

Булевая алгебра во время запроса будет делать. Сегодня утром я пришел к такому же выводу. Мне просто нужно обязательно включить ORs между словами запроса – preslavrachev

1

От Solr 4, defaultOperator устарел. Пожалуйста, не используйте его. Также, как и у меня defaultOperator работает так же, как указанный оператор в запросе. Я не могу сказать, почему это так, просто мой опыт.

Попробуйте запрос с парами {! Q.op = И}

Я думаю, вы используете по умолчанию анализатора запросов, исправить меня, если я ошибаюсь

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