2016-12-25 37 views
2

我有一個查詢過濾日期範圍和期限,選擇從「0」開始的N個文檔,然後然後對它們進行排序。但是,我希望在篩選之後立即進行排序,然後再選擇N個文檔。Elasticsearch - 如何在排序後應用大小

我的查詢:

{ 
    'filter': { 
     'and': [ 
      { 
       'range': { 
        'updated_at': { 
         'lte': 1482652799999, 
         'gte': 1481961600000 
        } 
       } 
      }, 
      { 
       'term': {'name': 'my name'} 
      } 
     ] 
    }, 
    'sort': [ 
     'updated_at', {'updated_at': 'desc'} 
    ], 
    'size': 3, 
    'from': 0 
} 

此查詢是給我: 批次1 = [12/17,12/17,12/15]和 「從」 值遞增, 批次2 = [12/21,12/20,12/18],

但我想: 第1批= [12/21,12/20,12/18]和 第2批= [12/17,12/17,12/15]。

回答

0

它應該應用排序之前的過濾器。嘗試將您的過濾器轉換爲查詢,或至少是術語部分。它應該作爲查詢,排序,過濾來執行。

0

確定查詢的問題。 ES接受2種類型的格式 - 從自己的文件(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html)的例子:

"sort" : [ 
    { "post_date" : {"order" : "asc"}}, 
    "user", 
    { "name" : "desc" }, 
    { "age" : "desc" }, 
    "_score" 
] 

我的查詢語句失敗,因爲它有錯誤的語法(見「分類」下面的鍵):

{ 
    'filter': { 
     'and': [ 
      { 
       'range': { 
        'updated_at': { 
         'lte': 1482652799999, 
         'gte': 1481961600000 
        } 
       } 
      }, 
      { 
       'term': {'name': 'my name'} 
      } 
     ] 
    }, 
    'sort': {'updated_at': 'desc'} # vs ['updated_at', {'updated_at': 'desc'}] 
    'size': 3, 
    'from': 0 
}