Solr在多个字段上进行搜索查询

46

在Solr中,是否可以通过两个不同的词语在两个字段中进行搜索,并仅返回包含这两个词语的结果?

例如,假设我有“type”和“location”两个字段,我只想要那些同时拥有type='furniture'和location='office'的结果。

4个回答

79

您可以使用布尔运算符并在单个字段上搜索。

q=type:furniture AND location:office

如果值是固定的,最好使用过滤查询以提高性能。

fq=type:furniture AND location:office

3
当你有这样一个使用 AND 的查询时,最好考虑将其改为使用过滤查询 fq=,因为这可以更快地实现。 - Michael Dillon
1
是的...同意。如果要求是过滤而不是搜索,则应始终应用fq。 - Jayendra
2
当您否决一个答案时,请提供评论。这会确实有所帮助。 - Jayendra
你能否建议我如何使用Solrnet查询进行FQ操作? - Ankita

6
建议的解决方案存在一个缺点,就是您需要注意转义特殊字符。如果用户搜索“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)逻辑AND组合。

Solr文档

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


5
您可以在dismaxRequest处理程序上使用boostQuery函数,如下所示:
type=dismax&bq=type:furniture AND location:office

3
fq=type:furniture AND location:office

可以将其拆分为两个过滤查询,而不是使用AND。

fq=type:furniture
fq=location:office

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接