我正在构建某种文件存储软件。
文件元数据使用filesize
和userId
等字段编制索引
在
我想做的是能够计算用户使用的空间。
例如,如果我有文件:
我想运行一个查询,以便对于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
的统计信息吗?我根本没有看到这个问题......
答案 0 :(得分:0)
好消息,写这个问题帮我找到了解决方案。我使用旧版架构,但没有注意到FileSize
字段有indexed="false"
。
将此属性传递给true会使StatsComponent返回该字段的统计信息!
但是,对于与OtherField3
具有完全相同定义的字段OtherField2
,我没有答案