如何获得用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" }
              }
           }
        }
      }
    }'
    

    10-05 19:35