我似乎无法以某种方式收到包含我的聚合的响应…
使用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-rails 与 elasticsearch-model gem一起使用,则在 模型上 运行聚合时,可以像以下示例一样获得存储桶:
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}, ...]
然后,您可以做任何您想做的事!希望有帮助!