Я разрабатываю простую платформу для ведения блогов / закладок и пытаюсь добавить тегов-исследователей / детализацию с функцией là восхитительной , чтобы пользователи могли фильтроватьсообщения с указанием списка определенных тегов.
Примерно так:
Сообщения представлены в хранилище данных с помощью этой упрощенной модели:
class Post(db.Model):
title = db.StringProperty(required = True)
link = db.LinkProperty(required = True)
description = db.StringProperty(required = True)
tags = db.ListProperty(str)
created = db.DateTimeProperty(required = True, auto_now_add = True)
Теги сообщенияхранится в ListProperty , и для получения списка сообщений, помеченных определенным списком тегов, модель Post предоставляет следующий статический метод:
@staticmethod
def get_posts(limit, offset, tags_filter = []):
posts = Post.all()
for tag in tags_filter:
if tag:
posts.filter('tags', tag)
return posts.fetch(limit = limit, offset = offset)
Это хорошо работает,хотя я не особо подчеркивал это.
Проблема возникает, когда я пытаюсь добавить порядок "сортировки" в метод get_posts
, чтобы сохранить результат в порядке "-created"
date:
@staticmethod
def get_posts(limit, offset, tags_filter = []):
posts = Post.all()
for tag in tags_filter:
if tag:
posts.filter('tags', tag)
posts.order("-created")
return posts.fetch(limit = limit, offset = offset)
Порядок сортировки добавляет индекс для каждого тега для фильтрации, что приводит к страшной проблеме взрывающихся индексов .
Еще одна вещь, которая усложняет эту вещь, - это метод get_posts
должен предоставить сомМеханизм нумерации страниц.
Знаете ли вы какую-либо стратегию / идею / обходной путь / взлом, чтобы решить эту проблему?