小编典典

Rails Elasticsearch聚合

elasticsearch

我似乎无法以某种方式收到包含我的聚合的响应…

使用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

我得到一个空的答复:

[  ]

如何在这里打印出卷曲的聚集体?


阅读 250

收藏
2020-06-22

共1个答案

小编典典

我也在为此而苦苦挣扎,但是现在我发现了如何获得聚合结果。

如果您将 elasticsearch-railselasticsearch-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}, ...]

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

2020-06-22