4

默认情况下,Solr 返回一个字段的构面,然后如果您为该字段选择一个构面值,则所有其他先前的选择不再作为该字段的构面的一部分返回。

我正在尝试开发一个更像亚马逊搜索引擎的搜索引擎(它基于他们自己的 A9 搜索引擎,因此可能类似于 Amazon CloudSearch)。

当您缩小到亚马逊搜索中的某些“方面”时,它们会继续显示其他选项,以及如果您将该区域添加到搜索中的计数。

Solr 中有内置的方法吗?如果没有,我将如何自己滚动。显然,我需要缓存为该字段返回的原始方面。但是,一旦我已经为该字段选择了一个(或多个)刻面,那么计算其他刻面区域的计数的最有效方法是什么。Obviously when additional facets are selected, you're doing an "OR" query between those values, as you're trying to show things with either of the two values.

例如,我在亚马逊的珠宝部门搜索了钻石戒指,然后缩小到黄金作为金属类型。然后我可以选择多个克拉刻面:

亚马逊分面示例

有人可以提供一个关于我如何(有效地)使用 Solr 做到这一点的例子吗?

未来版本的 Solr 是否有任何功能可以提供开箱即用的功能(假设它还没有在盒子里)?

4

2 回答 2

7

Tagging and excluding FiltersSolr 中的功能可能是您正在寻找的功能,这里是解释Multi Select Faceting的 Wiki 链接。

例如: : ../solr/select/?q=*&rows=0&facet=on&fq={!tag=krt}KARAT:10k_Gold&facet.field={!ex=krt}KARAT

我猜这个功能从 Solr 1.4 开始就存在了。

于 2012-10-16T20:27:45.273 回答
3

使用 Solr 的新 JSON Facet API 进行多选分面的工作方式略有不同。您仍然以相同的方式标记过滤器,但有不同的排除语法。

&q="running shorts"
&fq={!tag=COLOR}color:(Blue Black)
&json.facet={
      sizes:{type:terms, field:size},
      colors:{type:terms, field:color, domain:{excludeTags:COLOR} },
      brands:{type:terms, field:brand, domain:{excludeTags:BRAND} }
}

注意为蓝色或黑色项目选择的过滤器上的 tag=COLOR。当我们考虑颜色时,我们希望忽略(或排除)带有该标签的过滤器,因此我们仍然可以恢复其他颜色计数。这就是 domain:{excludeTags:COLOR} 所做的。

这个例子取自http://yonik.com/multi-select-faceting/

于 2015-11-25T17:31:00.920 回答