【发布时间】:2013-02-19 19:01:46
【问题描述】:
我正在构建某种文件存储软件。
文件元数据使用filesize 和userId 等字段进行索引
我想做的是能够计算用户使用的空间。
例如,如果我有文件:
- documentId = 1 |用户 ID = 1 |文件大小 = 10
- documentId = 2 |用户 ID = 2 |文件大小 = 5
- documentId = 3 |用户 ID = 1 |文件大小 = 3
我想运行一个查询,以便对于 userId=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 它不会给我带来更好的结果)。
该文档的 FileSize 设置为 15
我使用 Solr 4.1
谁能解释一下为什么我可以获得字段OtherField 和OtherField2 的统计信息,但不能获得字段FileSize 和OtherField3 的统计信息?我根本看不到问题...
【问题讨论】:
-
重新统计组件 - 为什么你有 q=docId:123?不应该是 q=userId:1 吗?
-
在我的最终查询中是的,但为了帮助调试,我直接过滤了 docId
标签: solr