java - 使用 SolrJ 和 Solr4 进行分面

标签 java solr solrj faceted-search solr4

我已经浏览了本网站上的相关问题,但没有找到相关的解决方案。

当使用表单的 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 对象中提取分面数据?

谢谢。

更新:

我还尝试了类似于 Sergey 的回应(如下)。

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);           
}

上面的代码显示了 ffList 的大小为 1,循环经历了 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();
    }
}

在上面的代码中,label 变量匹配每个方面组,count 是该分组的相应计数。

最佳答案

其实你只需要设置facet字段,facet就会被激活(查看SolrJ源码):

solrQuery.addFacetField("country");

您在哪里查找方面信息?它必须在 QueryResponse.getFacetFields (getValues.getCount)

关于java - 使用 SolrJ 和 Solr4 进行分面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14485031/

相关文章:

java - 正则表达式 isMatch 返回 false

java - Spring Boot 和 Ajax 响应

java - 使用我的自定义外部登录与 spring boot oauth2 (授权授予类型)?

solr dismax识别短语匹配

solr - 使用 Solr 1.4 进行通配符搜索和突出显示

java - 如何正确使用 Solrj 中的评分函数

java - 用xml编写的文件描述符

solr:boost查询将被忽略

java - solr 4.0如何加入子文档

java - Solr CloudSolrClient : Caused by: java. lang.ClassCastException : java. lang.String 无法转换为 java.util.Map