我正在使用Solr Admin UI来构建此查询:
{
"response": {
"numFound": 1,
"start": 0,
"docs": [
{
"id": "TH-1961-46483-10968-9",
"externalid": "100700000_00024"
}
]
},
"facet_counts": {
"facet_queries": {},
"facet_fields": {
"externalid": [
"100700000_00024",
1,
"005471837_00001",
0,
"005471837_00002",
0,
"005471837_00003",
0,
"005471837_00099",
0,
....
]
}
}
}
它返回:
facet_counts
我的假设是它只返回它找到的一个文档的facet计数(因为我指定了我想要的id)。相反,它返回一个externalid
结构,其中每个externalid
值由Solr索引(被授予...除了一个条目为0之外。与查询匹配的文档的facet.mincount = 1
计数为1,因为它很重要成为)。但我只想要搜索结果中的文档的Solr facet计数。不是一切。它会大大减慢查询速度。
是的,我可以设置tracing on;
使其仅返回实际上具有计数的分面计数,但是在封面下它看起来仍然看起来正在查看所有文档...而不仅仅是查询的结果集。目前,我们需要2分钟才能对我们的2亿个项目执行上述查询。
当我在cqlsh中转动externalid
时,我可以看到它正在处理所有2亿个以上的项目。如果仅计算结果集,则此查询将更快,更快。
<field docValues="true" indexed="true" multiValued="false" name="externalid" stored="true" type="StrField"/>
在模式文件中定义如下:
%% PLOT OF MEAN SEA LEVEL
%mean sea level in every 12:24.5 Hrs
clc
n = 74; % dataset where in every 10 minutes 74 gives 1-period of tide
a1c = reshape(cumsum(wl1c,2),[],1); % wl1c = 8280x1 matrix of value of waterlevel 1
mwl1c = arrayfun(@(i) mean(a1c(i:i+n-1)),1:n:length(a1c)-n+1)'; % the averaged vector
a2c = reshape(cumsum(wl2c,2),[],1); % wl2c = 8280x1 matrix of value of waterlevel 2
mwl2c = arrayfun(@(i) mean(a2c(i:i+n-1)),1:n:length(a2c)-n+1)'; % the averaged vector
scatter((1:length(mwl1c))',mwl1c,10);
lsline;
hold on;
scatter((1:length(mwl2c))',mwl2c,10);
lsline;
hold off
我误解了什么? 它正在减慢我的查询,因为必须出去找到所有的externalid,只是说它们的计数为0.
有没有办法告诉Solr faceing只查看从查询中找到的文档?
我在DSE 6.0下的Solr 6
答案 0 :(得分:0)
您可以通过facet.method
参数提供the facet method。 fc
是默认值,这是您正在寻找的行为 - 您确定DSE默认情况下使用fc
作为方法吗? (因为fc
的定义是它应该只迭代匹配查询的文档):
<强> FC 强>
通过迭代与查询匹配的文档计算构面数,并对每个文档中出现的术语求和。
如果字段是多值的或被标记化的(根据FieldType.isTokened()),目前使用UnInvertedField缓存实现。在缓存中查找每个文档以查看它包含的条件/值,并为每个值增加一个计数。
对于字段的索引值数量较多但每个文档的值数量较少的情况,此方法非常好。对于多值字段,使用混合方法,该方法使用filterCache中的术语过滤器来查找与许多文档匹配的术语。字母fc代表字段缓存。