我已经浏览过该网站上的相关问题,但尚未找到相关的解决方案。
使用以下形式的 HTTP 请求查询我的 Solr4 索引时
&facet=true&facet.field=country
响应包含所有不同的国家以及每个国家的计数。
如何使用 SolrJ 获取此信息?
我已尝试以下操作,但它仅返回所有国家/地区的总计数,而不是每个国家/地区的总计数:
solrQuery.setFacet(true);
solrQuery.addFacetField("country");
以下似乎确实有效,但我不想事先显式设置所有分组:
solrQuery.addFacetQuery("country:usa");
solrQuery.addFacetQuery("country:canada");
其次,我不确定如何从 QueryResponse 对象中提取方面数据。
那么两个问题:
1)使用 SolrJ 如何在字段上进行分面并返回分组而不显式指定组?
2)使用SolrJ如何从QueryResponse对象中提取方面数据?
Thanks.
Update:
我也尝试了类似于谢尔盖的回应(如下)。
List<FacetField> ffList = resp.getFacetFields();
log.info("size of ffList:" + ffList.size());
for(FacetField ff : ffList){
String ffname = ff.getName();
int ffcount = ff.getValueCount();
log.info("ffname:" + ffname + "|ffcount:" + ffcount);
}
上面的代码显示了 size=1 的 ffList 并且循环进行了 1 次迭代。在输出中,ffname="country" 和 ffcount 是与原始查询匹配的行总数。
这里没有按国家/地区进行细分。
我应该提到的是,在同一个 solrQuery 对象上,我还调用了 addField 和 addFilterQuery。不确定这是否会影响分面:
solrQuery.addField("user-name");
solrQuery.addField("user-bio");
solrQuery.addField("country");
solrQuery.addFilterQuery("user-bio:" + "(Apple OR Google OR Facebook)");
更新2:
我想我明白了,再次基于谢尔盖下面所说的。我使用 FacetField.getValues() 提取了 List 对象。
List<FacetField> fflist = resp.getFacetFields();
for(FacetField ff : fflist){
String ffname = ff.getName();
int ffcount = ff.getValueCount();
List<Count> counts = ff.getValues();
for(Count c : counts){
String facetLabel = c.getName();
long facetCount = c.getCount();
}
}
在上面的代码中,标签变量匹配每个方面组,并且计数是该分组的相应计数。