Rails弹性搜索聚合

bna*_*ler 5 ruby elasticsearch ruby-on-rails-4

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

使用curl它按预期工作:

HBZUMB01$ curl -XPOST "http://localhost:9200/contents/_search" -d '{
  "size": 0,
  "aggs": {
    "sport_count": {
      "value_count": {
        "field": "dwid"
      }
    }
  }
}'
Run Code Online (Sandbox Code Playgroud)

我收到了回复:

{
  "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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是使用rails中的代码:

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

并在浏览器中呈现它

respond_to do |format|
  format.html do    
  render text: "#{@response}"   
end
Run Code Online (Sandbox Code Playgroud)

我得到一个空的回复:

[  ]
Run Code Online (Sandbox Code Playgroud)

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

Mau*_*aes 13

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

如果您正在使用elasticsearch-railselasticsearch-model gems,那么当您在模型上运行聚合时,您可以获得如下示例中的桶:

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

在您的RoR代码中:

agg.response["aggregations"]["my_aggregation_name"]["buckets"]
Run Code Online (Sandbox Code Playgroud)

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

[{"key"=>"banana",
  "doc_count"=>1963,
  "score"=>478.30920868573355,
  "bg_count"=>2152},
 {"key"=>"potato",
  "doc_count"=>1212,
  "score"=>315.68857496078505,
  "bg_count"=>1243}, ...]
Run Code Online (Sandbox Code Playgroud)

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