我试图以嵌套的方式执行几个字段的搜索结果聚合(计数和求和)分组.
例如,使用本文末尾显示的模式,我希望能够得到“大小”的总和按“类别”分组,并进一步按“子类别”进行分组,得到如下内容:
<category name="X"> <subcategory name="X_A"> <size sum="..." /> </subcategory> <subcategory name="X_B"> <size sum="..." /> </subcategory> </category> ....
我一直在寻找Solr的Stats组件,据我所知,它不允许嵌套聚合.
如果有人知道某种方式来实现这一点,无论是否有Stats组件,我都会感激不尽.
以下是目标模式的简化版本:
<types> <fieldType name="string" class="solr.StrField" /> <fieldType name="text" class="solr.TextField"> <analyzer><tokenizer class="solr.StandardTokenizerFactory" /></analyzer> </fieldType> <fieldType name="date" class="solr.DateField" /> <fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitnorms="true" positionIncrementGap="0" /> </types> <fields> <field name="id" type="string" indexed="true" stored="true" /> <field name="category" type="text" indexed="true" stored="true" /> <field name="subcategory" type="text" indexed="true" stored="true" /> <field name="pdate" type="date" indexed="true" stored="true" /> <field name="size" type="int" indexed="true" stored="true" /> </fields>
解决方法
Solr 5.1中的新分面模块可以执行此操作,它在
https://issues.apache.org/jira/browse/SOLR-7214中添加
以下是如何将sum(size)添加到每个facet bucket,并按该统计信息降序排序.
json.facet={ categories:{terms:{ field:category,sort:"total_size desc",// this will sort the facet buckets by your stat facet:{ total_size:"sum(size)" // this calculates the stat per bucket } }} }
json.facet={ categories:{terms:{ field:category,facet:{ total_size:"sum(size)",subcat:{terms:{ // this will facet on the subcategory field for each bucket field:subcategory,facet:{ sz:"sum(size)" // this calculates the sum per sub-cat bucket }} } }} }
因此,上面将给出类别和子类别级别的总和(大小).新facet模块的文档目前为http://yonik.com/json-facet-api/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。