不知怎的,我似乎无法得到包含我的聚合的回复......
使用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
我得到一个空的回复:
[ ]
如何在这里打印我的卷轴?
答案 0 :(得分:13)
我也在努力解决这个问题,但现在我发现了如何获得聚合结果。
如果您将 elasticsearch-rails 与 elasticsearch-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}, ...]
然后你可以做任何你想做的事!希望有所帮助!