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 搜索多个字段的查询的主要内容,如果未能解决你的问题,请参考以下文章