Ответ 1
Вы можете использовать логические операторы и искать в отдельных полях.
q=type:furniture AND location:office
Если значения фиксированы, лучше использовать запросы фильтра для производительности.
fq=type:furniture AND location:office
Можно ли искать solr над двумя полями с использованием двух разных слов и возвращать только те результаты, которые содержат их оба?
Например, если у меня есть поля "type" и "location", я хочу только те результаты, у которых есть type = 'furniture' и location = 'office'.
Вы можете использовать логические операторы и искать в отдельных полях.
q=type:furniture AND location:office
Если значения фиксированы, лучше использовать запросы фильтра для производительности.
fq=type:furniture AND location:office
Вы также можете использовать функцию boostQuery для обработчика dismaxRequest как
type=dismax&bq=type:furniture AND location:office
Предлагаемые решения имеют недостаток, что вы должны заботиться об экранировании специальных символов. Если пользователь выполняет поиск "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
Объяснение
Solr Docs
fq=type:furniture AND location:office
Вместо использования AND это может быть разбито на два запроса фильтра.
fq=type:furniture
fq=location:office