Подтвердить что ты не робот

Solr и запрос по нескольким полям

Можно ли искать solr над двумя полями с использованием двух разных слов и возвращать только те результаты, которые содержат их оба?

Например, если у меня есть поля "type" и "location", я хочу только те результаты, у которых есть type = 'furniture' и location = 'office'.

4b9b3361

Ответ 1

Вы можете использовать логические операторы и искать в отдельных полях.

q=type:furniture AND location:office

Если значения фиксированы, лучше использовать запросы фильтра для производительности.

fq=type:furniture AND location:office

Ответ 2

Вы также можете использовать функцию boostQuery для обработчика dismaxRequest как

type=dismax&bq=type:furniture AND location:office

Ответ 3

Предлагаемые решения имеют недостаток, что вы должны заботиться об экранировании специальных символов. Если пользователь выполняет поиск "type: d'or AND location: coffee break", запрос будет терпеть неудачу.

Я предлагаю объединить два обработчика edismax:

 <requestHandler name="/combine" class="solr.SearchHandler" default="false">
     <lst name="invariants">
       <str name="q">
        (_query_:"{!edismax qf='type' v=$uq1}"
   AND _query_:"{!edismax qf='location' v=$uq2}")
       </str>
     </lst>
  </requestHandler>

Вызвать обработчик запроса следующим образом:

http://localhost:8983/solr/collection1/combine?uq1=furniture&uq2=office

Объяснение

  • Переменные $uq1 и $uq2 будут заменены параметрами запроса uq1 и uq2.
  • Результат первого запроса edismax (uq1) объединяется логическим И со вторым запросом edismax (uq2)

Solr Docs

https://wiki.apache.org/solr/LocalParams

Ответ 4

fq=type:furniture AND location:office

Вместо использования AND это может быть разбито на два запроса фильтра.

fq=type:furniture
fq=location:office