我正在尝试以嵌套方式按多个字段执行搜索结果聚合(计数和总和)。
例如,通过本文末尾显示的模式,我希望能够获得按“类别”分组并按“子类别”进一步细分的“大小”的总和,并得到如下所示的内容:
<category name="X">
<subcategory name="X_A">
<size sum="..." />
</subcategory>
<subcategory name="X_B">
<size sum="..." />
</subcategory>
</category>
....
我主要关注 Solr 的 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中新的faceting模块可以做到这一点,它被添加到https://issues.apache.org/jira/browse/SOLR-7214 https://issues.apache.org/jira/browse/SOLR-7214
以下是如何将 sum(size) 添加到每个方面存储桶,并按该统计数据降序排序。
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,
sort:"total_size desc",
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
}}
}
}}
}
因此,上面的内容将为您提供类别和子类别级别的总和(大小)。新方面模块的文档目前位于http://yonik.com/json-facet-api/ http://yonik.com/json-facet-api/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)