我的架构如下:
product_id
category_id
类别包含产品 在solr 3.6中,我对category_id进行了分组,效果很好。
我刚刚添加了一个新字段:
group_id
一组包含大小或颜色不同的产品 示例:蓝色,红色和黄色的鞋子是3种不同的产品,并且具有相同的group_id。
除了字段category_id的结果分组之外,我想在结果中只有一个group_id的产品,假设group_id可以为null(对于不属于某个组的产品)。
按照鞋子的例子,这意味着对于请求“鞋子”,3个产品中只有一个应该在结果中。
我想在group_id上进行第二次结果分组,但我似乎不可能这样做。
有什么想法吗?
编辑:目前,我在php中处理结果以删除具有已存在于结果中的group_id的文档。我打开这个主题,以防有人发现如何分组2个字段
答案 0 :(得分:5)
如果您的目标是根据多个“分组依据”字段获取分组计数,则可以使用 pivot faceting 来实现此目的。
&facet.pivot=category_id,group_id
Solr将根据facet_pivot
元素下的搜索结果页面返回分组结果计数的层次结构。
答案 1 :(得分:3)
无法按两个字段进行查询分组。
如果您需要计数,则可以使用facet.field
(对于单个字段)或facet.pivot
(对于多个字段)。
它实际上不是组,但您可以为多个字段计算该组的数量。
示例输出:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<bool name="zkConnected">true</bool>
<int name="status">0</int>
<int name="QTime">306</int>
</lst>
<result name="response" numFound="667" start="0" maxScore="0.70710677">
<doc>
<int name="idField">7393</int>
<int name="field_one">12</int>
</doc>
</result>
<lst name="facet_counts">
<lst name="facet_queries"/>
<lst name="facet_fields"/>
<lst name="facet_ranges"/>
<lst name="facet_intervals"/>
<lst name="facet_heatmaps"/>
<lst name="facet_pivot">
<arr name="field_one,field_two">
<lst>
<str name="field">field_one</str>
<int name="value">3</int>
<int name="count">562</int>
<arr name="pivot">
<lst>
<str name="field">field_two</str>
<bool name="value">true</bool>
<int name="count">347</int>
</lst>
<lst>
<str name="field">field_two</str>
<bool name="value">false</bool>
<int name="count">215</int>
</lst>
</arr>
</lst>
<lst>
<str name="field">field_one</str>
<int name="value">12</int>
<int name="count">105</int>
<arr name="pivot">
<lst>
<str name="field">field_two</str>
<bool name="value">true</bool>
<int name="count">97</int>
</lst>
<lst>
<str name="field">field_two</str>
<bool name="value">false</bool>
<int name="count">8</int>
</lst>
</arr>
</lst>
</arr>
</lst>
</lst>
</response>
示例查询:
http://192.168.100.145:7983/solr/<collection>/select?facet.pivot=field_one,field_two&facet=on&fl=idField,field_one&indent=on&q=field_one:(3%2012)&rows=1&wt=xml
答案 2 :(得分:2)
如果您可以更改要发布到solr的数据,那么我建议您创建一个字符串字段,该字段将具有category_id和group_id的串联。例如,如果category_id = 5且group_id = 2,那么您的字符串字段可以是: - '5,2'(使用','或任何其他字符作为分隔符)。然后,您可以对此字符串字段进行分组。