2012-10-16 35 views
4

默认情况下,Solr的返回方面的字段,然后如果该字段选择方面值,所有其他先前的选择不再返回的方面该字段的一部分。多个方面使用Solr

我试图开发工作更像亚马逊的搜索引擎的搜索引擎(这是基于自己的A9搜索引擎,因此,很可能是类似亚马逊CloudSearch)。

当你缩小到亚马逊上搜索一些“面”,他们继续显示其他选项,与数一起,如果你是对这一区域添加到您的搜索。

在Solr中有内置的方法吗?如果不是,我会如何推出自己的。显然,我需要缓存为该字段返回的原始构面。但是,一旦我已经选择了一个(或多个)方面,那么计算这些其他分面区域的计数的最有效方法是什么?很明显,当选择了其他方面时,你正在做这些值之间的“OR”查询,因为你试图用两个值中的任何一个来显示事物。

例如,我进行了亚马逊的珠宝部门的钻石戒指,然后缩小到黄金作为金属类型的搜索。当时我能够选择多种克拉方面:

Example Amazon faceting

有人可以提供我怎么能(有效)做到这一点使用Solr的例子吗?

,并没有在作品的Solr的未来版本将提供此功能开箱即用的任何特征(假设它是不是已经在盒子)?

+0

[这个答案](http://stackoverflow.com/a/18492357/2697658)采取能帮助人们找到基于标题这个问题。 – juan

回答

7

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

例如::../solr/select/?q=* &行= 0 &面=上& FQ = {KARAT标签= KRT!}!10k_Gold & facet.field = {EX = KRT }卡拉特

此功能存在,因为Solr的1.4,我猜。

+1

谢谢,我认为这会奏效! –

+0

+1这对我真的很有帮助。你可以请分享我如何做与1.4中的SolrQuery相同。类似setFacetField()? – manurajhada

+0

如何在字段的多个值的情况下对字段进行标记,并且正在将查询用于筛选查询。我的过滤器查询是 'fq = {!terms = country_facet} uk,germany'。 – ranjan

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/