如何在elasticsearch中编写此复杂查询

时间:2015-04-13 12:04:57

标签: 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));

1 个答案:

答案 0 :(得分:2)

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

  • 计数会自动返回,不需要明确 请求。
  • "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" } 
          }
       }
    }
  }
}'