如何使用solrj 4.9.0提取stats组件

时间:2014-07-26 01:14:10

标签: java statistics solrj solr-query-syntax

我有像这样的solr查询

q=categories:cat1 OR categories:cat2&stats=true&stats.field=count&stats.facet=block_num

基本上,我想通过块num得到sum(count)组。

此查询适用于浏览器。但是使用solrj,我无法从Response obj访问stats字段。我可以做一个response.getFieldStatsInfo()。但这不是我想要的。以下是我构建查询的方法

    SolrQuery query = new SolrQuery(q);       
    query.add("stats", "true");
    query.add("stats.field", "count");
    query.add("stats.facet", "block_num");

使用调试器,我可以看到响应有一个私有的statsInfo对象,它有我正在寻找的信息。但是没有api可以访问该对象。

我想知道是否有

  1. 查询solrj以外的solr服务器的更好方法(curl?你如何解析响应?
  2. 构建查询的更好方法。也许使用组而不是统计数据?
  3. 一种访问查询响应()中隐藏的statsInfo对象的方法? [太沮丧了。我可以在调试器的私有obj中看到我需要的所有信息!]
  4. 谢谢!

1 个答案:

答案 0 :(得分:3)

可以这样做:

// Field names
private static final String FIELD_ONE = "field_one";
private static final String FIELD_TWO = "field_two";

// Initialized somewhere in constructor
private final HttpSolrServer solrClient;

public void printStats() throws SolrServerException {
    final SolrQuery query = new SolrQuery("*:*");
    query.setGetFieldStatistics(true);
    query.setGetFieldStatistics(FIELD_ONE);
    query.setGetFieldStatistics(FIELD_TWO);
    final QueryResponse response = solrClient.query(query);

    final FieldStatsInfo fieldOneStats = response.getFieldStatsInfo().get(FIELD_ONE); 
    System.out.println(fieldOneStats.getSum());
    System.out.println(fieldOneStats.getMin());
    System.out.println(fieldOneStats.getMax());

    final FieldStatsInfo fieldTwoStats = response.getFieldStatsInfo().get(FIELD_TWO);
    System.out.println(fieldTwoStats.getSum());
    System.out.println(fieldTwoStats.getMin());
    System.out.println(fieldTwoStats.getMax());
}