2013-07-08 2 views
0

Мы реализуем функцию поиска с использованием Solr в качестве внутреннего сервера. Данные извлекаются из базы данных с использованием DIH. Основная информация документа включает:Лучший способ поиска динамического списка полей с помощью Solr?

- product number (number) 
- product name (name) 
- applicant name (applicant) 
- product purpose (purpose) 

Все поля хранятся и индексируются.

Мы предоставляем единое окно поиска для пользователей, чтобы вводить любое количество ключевых слов, и система будет искать по всем полям и попытаться сопоставить их все. Для этого мы создаем дополнительное поле, которое объединяет всю информацию выше, используя «copyField».

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

В настоящее время мы используем следующий подход запроса для выполнения функции:

Например, учитывая, что

- the user provide keywords: K1 and K2, 
- and the user want to search on name, applicant and purpose only, 

следующая строка поиска будет динамически и отправлен в Solr:

(name:K1 OR applicant:K1 OR purpose:K1) AND (name:K2 OR applicant:K2 OR purpose:K2) 

Есть ли другой способ реализовать функцию? Было бы очень признательно, если бы вы могли поделиться своим опытом.

Спасибо, Fan

ответ

0

вы можете проверить обработчик запроса с edismax и с конфигурацией по умолчанию qf, который искал бы на copyfield, который хранит данные из всех полей.

Поле запроса qf, в котором будет выполняться запрос.

Вам просто нужно передать один параметр в solr qt=edismax&q=K1 K2 для поиска.

<requestHandler name="edismax" class="solr.SearchHandler" > 
    <lst name="defaults"> 
     <str name="defType">edismax</str> 
     <str name="qf"> 
      all_fields 
     </str> 
     <str name="fl"> 
      *,score 
     </str> 
     <str name="q.alt">*:*</str> 
    </lst> 
</requestHandler> 

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

Вам просто нужно передать один параметр в solr qt=edismax&q=K1 K2&qf=name applicant для поиска.

Вы можете управлять поведением ИЛИ с помощью параметра mm (минимального соответствия).

+0

Hi Jayendra, Спасибо за ответ. Будет ли «qt = edismax & q = K1 K2 & qf = имя заявителя» равным »(имя: K1 ИЛИ заявитель: K1) И (имя: K2 ИЛИ заявитель: K2)»? Какая разница между этими двумя подходами (например, Performance?) – user1397457

+0

Производительность будет такой же, как и у всех запущенных запросов. Простота настройки и управления – Jayendra

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