Rails弹性搜索聚合

不知怎的,我似乎无法获得包含我的聚合的回复……

使用curl它按预期工作:

HBZUMB01$ curl -XPOST "http://localhost:9200/contents/_search" -d '{ "size": 0, "aggs": { "sport_count": { "value_count": { "field": "dwid" } } } }' 

我收到了回复:

 { "took": 4, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 90, "max_score": 0.0, "hits": [] }, "aggregations": { "sport_count": { "value": 399 } } } 

但是使用rails中的代码:

 query = '{ "size": 0, "aggs": { "sport_count": { "value_count": { "field": "dwid" } } } }' @response = Content.search(query).to_json 

并在浏览器中呈现它

 respond_to do |format| format.html do render text: "#{@response}" end 

我得到一个空的回复:

 [ ] 

如何在这里打印我的卷轴?

我也在努力解决这个问题,但现在我发现了如何获得聚合结果。

如果您正在使用elasticsearch-railselasticsearch-model gems,那么当您在模型上运行聚合时,您可以像以下示例一样获取存储桶:

  agg = Model.search( query: { match: { param: 'value' } }, aggs: {my_aggregation_name: { terms: { field: :my_field} }} ) 

在您的RoR代码中:

 agg.response["aggregations"]["my_aggregation_name"]["buckets"] 

从那里,你会得到这样的结果:

 [{"key"=>"banana", "doc_count"=>1963, "score"=>478.30920868573355, "bg_count"=>2152}, {"key"=>"potato", "doc_count"=>1212, "score"=>315.68857496078505, "bg_count"=>1243}, ...] 

然后你可以做任何你想做的事! 希望有所帮助!