我如何在 elasticsearch 中编写这个复杂的查询

How can I write this complex query in elasticsearch

如何获得用 elasticsearch 编写的以下复杂查询

select username, count(id), 
  concat(YEAR(postedtime),'-',MONTH(postedtime),'-',DAY(postedtime),' ',HOUR(postedtime)) 
from table 
where username in ("user1", "user2", "user3") 
group by username, 
  concat(YEAR(postedtime),'-',MONTH(postedtime),'-',DAY(postedtime),' ',HOUR(postedtime));

下面是一个可以帮助您入门的查询 - 一些注意事项:

  • 自动返回计数,无需明确说明 要求。
  • "size":0 阻止返回文档 - 你只会看到聚合。
  • 返回的日期将在纪元 格式。
  • 您可以将 query_string 替换为 terms 查询或 甚至使用过滤器代替 - 这将取决于您的要求。
  • 有 2 个聚合级别,第一个是用户名,第二个是日期桶。

代码:

curl -XGET 'http://localhost:9200/myindex/table/_search?pretty' -d '{
 "size": 0,
 "query":{
    "query_string": { "query":"user1 OR user2 OR user3", "fields": ["username"]}
   },
 "aggs" : {
    "username_agg" : {
      "terms": {"field" : "username"},
      "aggs" : {
          "date_agg": { 
            "date_histogram" : { "field" : "postedtime", "interval" : "hour" } 
          }
       }
    }
  }
}'