我正在构建某种文件存储软件。 该文件的元数据进行索引与领域,如filesize
和userId
的Solr - 获取给定用户的所有“filemetadata.filesize”字段的总和
我想什么做的是能够计算由用户使用的空间。
对于为例,如果我有证件:
- documentId = 1 | userId = 1 | fileSize = 10
- documentId = 2 | userId = 2 | fileSize = 5
- documentId = 3 | userId = 1 |档案大小= 3
我想运行一个查询,以便为用户id = 1我检索结果是13MB(10 + 3)
我已经看到,我们可以运行FunctionQuery但它似乎没有做我想要的。
与FieldCollapsing相同,它不允许在分组结果上运行聚合函数。
我测试了StatsComponent,但它似乎没有工作原因不明。
我的架构包含:
<field name="FileSize" type="integer" indexed="false" stored="true" required="true" />
<field name="OtherField" type="sfloat" indexed="true" stored="true" required="false" />
<field name="OtherField2" type="integer" indexed="true" stored="true" required="false" multiValued="false"/>
<field name="OtherField3" type="integer" indexed="true" stored="true" required="false" multiValued="false"/>
当我执行查询
http://mysolr:8414/solr/mycore/select/?q=docId:123
&rows=0
&stats=true
&stats.field=FileSize
&stats.field=OtherField
&stats.field=OtherField2
&stats.field=OtherField3
我取回结果:
<lst name="stats">
<lst name="stats_fields">
<null name="FileSize"/>
<lst name="OtherField">
<double name="min">6.0</double>
<double name="max">6.0</double>
<long name="count">1</long>
<long name="missing">0</long>
<double name="sum">6.0</double>
<double name="sumOfSquares">36.0</double>
<double name="mean">6.0</double>
<double name="stddev">0.0</double>
<lst name="facets"/>
</lst>
<lst name="OtherField2">
<double name="min">0.0</double>
<double name="max">0.0</double>
<long name="count">1</long>
<long name="missing">0</long>
<double name="sum">0.0</double>
<double name="sumOfSquares">0.0</double>
<double name="mean">0.0</double>
<double name="stddev">0.0</double>
<lst name="facets"/>
</lst>
<null name="OtherField3"/>
</lst>
</lst>
正如你可以看到我所要求的统计单个文档(这不是真的有用,但有助于调试,无论如何没有q=docId:123
它不会返回我更好的结果)。 该文件有15 一组文件大小我使用Solr的4.1
能有人请解释我为什么可以得到场OtherField
和OtherField2
统计数据,而不是场FileSize
和OtherField3
?我根本没有看到问题...
重新StatsComponent - 为什么你有Q =的docId:123?不应该是q = userId:1而是? – 2013-02-19 11:20:27
在我的最后一个查询中,是的,但是为了帮助调试直接在docId上过滤掉 – 2013-02-19 11:39:43