Solr的每个场的多个面

时间:2012-10-16 19:06:37

标签: search solr faceted-search

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

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

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

在Solr中是否有内置方法可以做到这一点?如果没有,我将如何滚动自己。显然我需要缓存为该字段返回的原始方面。但是,一旦我已经为该领域选择了一个(或多个)方面,那么计算其他方面区域的计数的最有效方法是什么。显然,当选择其他构面时,您在这些值之间进行“OR”查询,因为您尝试使用这两个值中的任何一个来显示事物。

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

Example Amazon faceting

有人可以举例说明我如何(有效地)使用Solr做到这一点吗?

对于Solr的未来版本,是否有任何功能可以提供开箱即用的功能(假设它尚未包含在框中)?

2 个答案:

答案 0 :(得分:7)

Solr中的

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

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

这个功能自Solr 1.4以来就存在了。我想。

答案 1 :(得分: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} }
}

选择蓝色或黑色项目的过滤器上的注意标记= COLOR。 当我们面对颜色时,我们想要忽略(或排除)具有该标签的过滤器,以便我们仍然可以获得其他颜色计数。这就是域名:{excludeTags:COLOR}。

此示例取自http://yonik.com/multi-select-faceting/