Solr搜索多个字段的查询

时间:2011-11-11 05:09:14

标签: solr

是否可以使用两个不同的单词在两个字段中搜索Solr并仅返回包含这两个字段的结果?

例如,如果我有字段“type”和“location”,我只想要那些在其中包含type ='furniture'和location ='office'的结果。

4 个答案:

答案 0 :(得分:60)

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

q=type:furniture AND location:office

如果值已修复,则最好使用“过滤查询性能”。

fq=type:furniture AND location:office

答案 1 :(得分:5)

建议的解决方案有一个缺点,你必须关心转义特殊字符。 如果用户搜索“type:d'或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)的结果由逻辑AND与第二个edismax查询(uq2)组合

Solr Docs

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

答案 2 :(得分:4)

您还可以将dismaxRequest处理程序上的boostQuery函数用作

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

答案 3 :(得分:1)

fq=type:furniture AND location:office

不是使用AND,也可以分成两个过滤查询。

fq=type:furniture
fq=location:office