0

特定のランキングアルゴリズムに基づいた「ホット」ストーリーのフロントページを実装しています。ただし、App Engineデータストアに独自の並べ替え関数を渡す方法がわかりません(Pythonでsort(key = running_function)を使用して渡すことができます)。私はこのようなものが欲しい:

class Story(db.Model):
    user = db.ReferenceProperty(User)
    text = db.TextProperty()
    def ranking(self):
        # my ranking function, returns an int or something
        return 1
    ranking = property(ranking_function)

後で電話できるように:

Story.all().order("ranking").limit(50)

App Engineデータストアモデルを使用してこれを行う方法はありますか?

4

2 に答える 2

3

App Engineを使用した場合、これは不可能だと思いますが、目的を達成することは可能だと思います。クエリを実行するたびに、データストアでデータストア内のすべての要素に対してランキング関数を実行する必要があります。ランク付けしたいエンティティが何百万もある可能性があるため、これはあまりスケーラブルではありません。

代わりに、rankという整数のプロパティを用意し、エンティティを更新するたびに設定する必要があります。次に、そのプロパティをorder句で使用できます。

于 2010-02-24T20:58:42.777 に答える
2

これを処理する組み込みプロパティはありませんが、DerivedPropertyおよびその他の関連プロパティを実装するライブラリaetycoonがあります。これがどのように機能するかについての記事です。

于 2010-02-25T10:05:38.510 に答える