5

我有一个这样的 solr 查询

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

基本上,我想按块数获得总和(计数)组。

此查询适用于浏览器。但是使用 solrj,我无法从 Response obj 访问统计信息字段。我可以做一个 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 回答 1

4

可以这样做:

// 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());
}
于 2015-12-04T16:23:49.727 回答