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-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}, ...]
然后你可以做任何你想做的事! 希望有所帮助!
- URI :: InvalidURIError:方案http不接受注册表部分:: 9200(或错误的主机名?)
- Chef Ruby循环遍历.erb模板文件中的属性
- Rails 5:如何在弹性搜索中导入数据并执行条件搜索?
- 如何使用ruby迭代这个json文档?
- 如何使用“Elasticsearch”gem专门将elasticsearch与rails应用程序集成
- ElasticSearch with Tire不包括带STI模型的自定义分析器
- 法拉第:: ConnectionFailed,连接被拒绝 – 连接(2)为“localhost”端口9200错误Ruby on Rails
- 如何在新的Nitrous.io IDE上设置SearchKick / ElasticSearch?