Упорядочение по геопространственным данным и перемещение вверх по заданным c записям на основе поля - ElasticSearch DSL DRF - PullRequest
0 голосов
/ 13 февраля 2020

Ситуация, которую я сейчас пытаюсь разрешить, - это случай, когда GeoSpatialOrderingFilterBackend используется из ElasticSearch DSL - DRF, который упорядочивает документы на основе местоположения (широта, долгота), это в свою очередь выдает elasticsearch_dsl.search.Search queryset - упорядочен как надо; хотя у меня есть случай, когда некоторые имеют значение featured и поэтому хотели бы переместить их в начало набора запросов.

Сценарий (как есть):

Record 1, Location X, Featured False
Record 3 Location Y, Featured False
Record 2, Location Z, Featured True

Ожидается:

Record 1, Location Z, Featured True
Record 2, Location X, Featured False
Record 3, Location Y, Featured False

Сортировка впоследствии (как показано ниже) в наборе запросов помещает элемент вверху; хотя скремблирует весь порядок геопространственных / местоположений.

result = super().filter_queryset(request, queryset, view).sort('-featured')

Я ищу способ поднять избранные записи вверху; но следите за порядком записей.

1 Ответ

0 голосов
/ 13 февраля 2020

GeoSpatialOrderingFilterBackend предоставляет параметры запроса заказа в функции get_ordering_query_params. При повторном заказе на основе featured учитывайте также эти параметры в своем запросе.

geo_ordering_fields = self.get_ordering_query_params(request, view)
result = super().filter_queryset(request, queryset, view).sort('-featured', geo_ordering_fields)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...