Solr 搜索多个字段的查询

Posted

技术标签:

【中文标题】Solr 搜索多个字段的查询【英文标题】:Solr search query over multiple fields 【发布时间】:2011-12-26 18:12:18 【问题描述】:

是否可以在 Solr 中使用两个不同的词在两个字段上进行搜索,并且只返回包含这两个词的结果?

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

【问题讨论】:

【参考方案1】:

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

q=type:furniture AND location:office

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

fq=type:furniture AND location:office

【讨论】:

每当您有这样一个使用 AND 的查询时,最好考虑将其更改为使用过滤查询 fq=,因为这样会更快。 是的...同意。如果要求是过滤而不是搜索,则应始终应用 fq。 请在否决答案时提供 cmets。当然有帮助。 如果我想进行 FQ,您能否建议我如何进行 Solrnet 查询?【参考方案2】:

您还可以在 dismaxRequest 处理程序上使用 boostQuery 函数

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

【讨论】:

【参考方案3】:
fq=type:furniture AND location:office

除了使用 AND,这也可以分成两个过滤器查询。

fq=type:furniture
fq=location:office

【讨论】:

【参考方案4】:

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

Solr 文档

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

【讨论】:

以上是关于Solr 搜索多个字段的查询的主要内容,如果未能解决你的问题,请参考以下文章

solr查询空值null不存在的字段的方法

Solr查询解析器大全

有没有办法使用查询工具通过 solr 管理面板查看仅被索引但未存储的搜索文档字段?

检索 Solr 查询中的特定字段?

检索Solr查询中的特定字段?

在solr中查询具有不同字段的多个集合