Gir*_*Rao 5 java solr faceted-search solrj solr4
我已经浏览了本网站上的相关问题,但没有找到相关的解决方案.
使用表单的HTTP请求查询我的Solr4索引时
&facet=true&facet.field=country
Run Code Online (Sandbox Code Playgroud)
响应包含所有不同国家/地区以及每个国家/地区的计数.
如何使用SolrJ获取此信息?我尝试过以下方法,但它只返回所有国家/地区的总计数,而不是每个国家:
solrQuery.setFacet(true);
solrQuery.addFacetField("country");
Run Code Online (Sandbox Code Playgroud)
以下似乎有效,但我不想事先明确设置所有分组:
solrQuery.addFacetQuery("country:usa");
solrQuery.addFacetQuery("country:canada");
Run Code Online (Sandbox Code Playgroud)
其次,我不确定如何从QueryResponse对象中提取构面数据.
所以有两个问题:
1)使用SolrJ如何在字段上进行分面并返回分组而不明确指定组?
2)使用SolrJ如何从QueryResponse对象中提取构面数据?
谢谢.
更新:
我也尝试过类似谢尔盖的回应(下图).
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);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码显示了大小= 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)");
Run Code Online (Sandbox Code Playgroud)
更新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();
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,label变量匹配每个facet组,count是该分组的相应计数.
实际上你只需要设置facet字段并激活facet(检查SolrJ源代码):
solrQuery.addFacetField("country");
Run Code Online (Sandbox Code Playgroud)
您在哪里寻找方面信息?它必须在QueryResponse.getFacetFields(getValues.getCount)