Сортировка по дате с API поиска AppEngine

У меня есть документы с содержимым TextField и датой DateField. Я пытаюсь получить самые последние документы.

  • Обычный поиск с «дата> эпоха», похоже, уже сортирует результаты по дате. Это ожидаемое поведение?
  • Когда я пытаюсь явно отсортировать с помощью SortExpression, результаты даже не сортируются в каком-либо конкретном порядке (за исключением сервера разработки, где он, похоже, тоже работает).

Я использую следующий код:

index.search(search.Query(query_string='date > epoch', 
                          options=search.QueryOptions(
                            sort_options=search.SortOptions(
                              expressions=[search.SortExpression(
                                 expression='date', 
                                 direction=search.SortExpression.DESCENDING, 
                                 default_value='1970-01-01')])))

Как правильно это сделать?


person ElefEnt    schedule 01.07.2016    source источник


Ответы (2)


Согласно документации, все документы сортируются по рангу, если вы не укажете другой вариант сортировки. И ранг документа устанавливается на время, когда он был добавлен в индекс, опять же, если вы не укажете другой ранг.

Если это желаемое поведение, нет необходимости добавлять поле даты и сортировать по нему.

person Andrei Volgin    schedule 01.07.2016

Когда вы фильтруете по полю, вы заставляете использовать индекс, и в качестве побочного результата вывод будет отсортирован по этому полю.

https://cloud.google.com/appengine/docs/python/search/options

Когда вы вызываете метод search(), используя только строку запроса, результаты возвращаются в соответствии с параметрами запроса по умолчанию:

  • Документы возвращаются отсортированными в порядке убывания ранга
  • Документы возвращаются группами по 20 штук.
  • Полученные документы содержат все исходные поля

Не знаю, почему это не работает с явными параметрами сортировки.

person Alexander Trakhimenok    schedule 01.07.2016