Spring-Data-Solr聚合函数

时间:2014-10-16 19:47:15

标签: solr spring-data spring-data-solr

是否可以查询solr usign spring数据以获得一个字段的平均值/总和等? 我试图做分面(但只有数量可用)。

我发现有可用于solr的Stats组件。 添加查询一些参数,如stats.field或stats.facet应该有帮助。

是否可以使用spring-data-solr获取此信息?

1 个答案:

答案 0 :(得分:2)

这还没有在spring-data-solr上实现。新功能请求已完成here,同时您可以使用spring-data-solr SolrOperations实现来执行此类操作,并允许您直接使用底层SolrServer,如下所示:

Map<String, FieldStatsInfo> response = template.execute(new SolrCallback<Map<String, FieldStatsInfo>>() {

    @Override
    public Map<String, FieldStatsInfo> doInSolr(SolrServer solrServer) throws SolrServerException, IOException {
        SolrQuery params = new SolrQuery("*:*");
        params.add(StatsParams.STATS, "true");
        params.add(StatsParams.STATS_FIELD, "price");
        QueryResponse query = solrServer.query(params);
        return query.getFieldStatsInfo();
    }

});

System.out.println("Price sum....: " + response.get("price").getSum());
System.out.println("Price mean...: " + response.get("price").getMean());
System.out.println("Price min....: " + response.get("price").getMin());
System.out.println("Price max....: " + response.get("price").getMax());

从spring-data-solr 1.4版M1开始,您可以使用StatsOptions实现此目的,如下所示:

SimpleQuery statsQuery;
...
statsQuery.setStatsOptions(new StatsOptions().addField("price"));
...    
StatsPage<Product> statsPage = solrTemplate.queryForStatsPage(statsQuery, Product.class);

FieldStatsResult priceStatResult = statResultPage.getFieldStatsResult("price");
Object max = priceStatResult.getMax();
Long missing = priceStatResult.getMissing();