2016-12-25 2 views
2

У меня есть запрос, который фильтрует диапазон дат и термин, выбирает N документов, начинающихся с позиции «от» 0, и тогда сортирует их. Тем не менее, я хочу, чтобы сортировка произошла сразу после фильтрации, прежде чем выбрать 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 
} 
Смежные вопросы