Скажем, у меня есть объект, который выглядит примерно так:
class MyEntity(db.Model):
keywords = db.StringListProperty()
sortProp = db.FloatProperty()
У меня есть фильтр, который выполняет поиск по ключевым словам, выполнив это:
query = MyEntity.all()\
.filter('keywords >=', unicode(kWord))\
.filter('keywords <', unicode(kWord) + u"\ufffd")\
.order('keywords')
Который прекрасно работает. Проблема, с которой я сталкиваюсь, заключается в том, что, если я попытаюсь выставить заказ с помощью sortProp:
.order('sortProp')
порядок не имеет эффекта. Я понимаю, почему - в документации конкретно сказано, что это невозможно, и этот порядок сортировки игнорируется при использовании фильтров равенства с многозначным свойством (из документов Google):
Одним важным предупреждением являются запросы как с фильтром равенства, так и с
порядок сортировки по многозначному свойству. В этих запросах сортировка
порядок не учитывается. Для однозначных свойств это простой
оптимизация. Каждый результат будет иметь одинаковое значение для свойства,
поэтому результаты не нужно сортировать дальше. Тем не менее, многозначный
свойства могут иметь дополнительные значения. Так как порядок сортировки
без учета результатов запроса могут быть возвращены в другом порядке
чем если бы порядок сортировки был применен. (Восстановление сброшенного порядка сортировки
будет дорого и потребует дополнительных индексов, и этот вариант использования
редко, поэтому планировщик запросов оставляет это.)
Мой вопрос: кто-нибудь знает хороший обходной путь для этого? Есть ли лучший способ поиска по ключевым словам, который обходит это ограничение? Я действительно хотел бы объединить использование ключевых слов с упорядочением для других свойств. Единственное решение, которое я могу придумать, - это сортировка списка после запроса, но если я это сделаю, я потеряю способность смещаться в запрос и даже не получу результаты с самым высоким порядком сортировки, если набор данных большой.
Спасибо за ваши советы!