如何在ElasticSearch中使用外部'排序'进行内部查询?

时间:2014-08-20 05:06:52

标签: elasticsearch

我想在ElasticSearch中实现以下功能。我几乎可以得到正确的结果,问题是我无法获得最终结果列表的排序。

SELECT User, ScanDate, TotalSize FROM 
    [SELECT User, ScanDate, TotalSize FROM ElasticSearch 
        GROUP BY User ORDER BY ScanDate]
ORDER BY TotalSize LIMIT 10

基本上,我尝试做的是:

  • 根据最近一次扫描的TotalSize获取前10名用户。

我可以获取数据(使用Max的聚合和子聚合)。但是,我很难获得最终的订购 - 否则我必须这样做消耗这些数据的代码,我真的不需要这样做。


鉴于数据:

    • ScanDate:1,TotalSize:27
    • ScanDate:2,TotalSize:3
    • ScanDate:3,TotalSize:9
  • 史蒂夫
    • ScanDate:2,TotalSize:2
    • ScanDate:5,TotalSize:1
  • 约翰
    • ScanDate:1,TotalSize:50

我想要一个有序的结果:

  1. John(ScanDate:1,TotalSize:50)
  2. Rich(ScanDate:3,TotalSize:9)
  3. Steve(ScanDate:5,TotalSize:1)

  4. 提交给ElasticSearch的事件如下所示:

    {"User":"Rich","ScanDate":1,"TotalSize":27,"Type":"ScanEvent"}
    

    TotalSize很长。 ScanDate实际上是一个时间戳。 用户是STRING(NOT_ANALYZED)。