如何使用 solrj 4.9.0 提取统计组件

E.A*_*.A. 5 java statistics solrj solr-query-syntax

我有一个像这样的 solr 查询

q=categories:cat1 OR categories:cat2&stats=true&stats.field=count&stats.facet=block_num
Run Code Online (Sandbox Code Playgroud)

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

此查询适用于浏览器。但使用 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");
Run Code Online (Sandbox Code Playgroud)

使用调试器,我可以看到响应有一个私有 statsInfo 对象,并且它包含我正在查找的信息。但是没有API来访问该对象。

我想知道是否有

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

谢谢!

小智 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());
}
Run Code Online (Sandbox Code Playgroud)