【发布时间】:2011-12-26 18:12:18
【问题描述】:
是否可以在 Solr 中使用两个不同的词在两个字段上进行搜索,并且只返回包含这两个词的结果?
例如,如果我有字段 "type" 和 "location" ,我只想要那些包含 type='furniture' 和 location = 'office' 的结果。
【问题讨论】:
标签: solr
是否可以在 Solr 中使用两个不同的词在两个字段上进行搜索,并且只返回包含这两个词的结果?
例如,如果我有字段 "type" 和 "location" ,我只想要那些包含 type='furniture' 和 location = 'office' 的结果。
【问题讨论】:
标签: solr
您可以使用布尔运算符并搜索各个字段。
q=type:furniture AND location:office
如果值是固定的,最好使用过滤查询来提高性能。
fq=type:furniture AND location:office
【讨论】:
fq=,因为这样会更快。
您还可以在 dismaxRequest 处理程序上使用 boostQuery 函数
type=dismax&bq=type:furniture AND location:office
【讨论】:
fq=type:furniture AND location:office
除了使用 AND,这也可以分成两个过滤器查询。
fq=type:furniture
fq=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 文档
【讨论】: