Solr поисковый запрос по нескольким полям - PullRequest
41 голосов
/ 11 ноября 2011

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

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

Ответы [ 4 ]

61 голосов
/ 11 ноября 2011

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

q=type:furniture AND location:office

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

fq=type:furniture AND location:office
5 голосов
/ 28 августа 2014

Предлагаемые решения имеют тот недостаток, что вам нужно заботиться о экранировании специальных символов.Если пользователь ищет «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>

Вызвать обработчик запроса какthis:

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 голосов
/ 11 ноября 2011

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

type=dismax&bq=type:furniture AND location:office
1 голос
/ 09 января 2014
fq=type:furniture AND location:office

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

fq=type:furniture
fq=location:office
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...