0

DjangoHaystackはの実行を必要とします

update_index

solrインデックスを新しいデータで更新するため、1つのフィールドのみを更新/変更する方法があるかどうか疑問に思っていました。

この1つのフィールドには、最新のデータが含まれている必要があります。データベースから取得した最新の値を使用して、sqsディクショナリのlikesの値を更新する方法はありますか?今のところスクリプトを作成しましたが、実行に時間がかかりすぎます。

sqs = SearchQuerySet().all()
d = Data.objects.all()

l = []

for i in d:
    l.append((i.id, i.like))

for i in sqs:
    for j,k in d:
        if i.id == j:
           i.like = k

多分これをスピードアップする方法はありますか?

ありがとう!!

4

1 に答える 1

0

辞書 (配列O(1)のルックアップの複雑さではなくルックアップの複雑さ)とメソッドを使用した簡単な最適化を次に示します。O(n).only.filter

d = Data.objects.all().only( "id", "like" )
d = dict( ( o.id, o.like ) for o in d )

sqs = SearchQuerySet().filter( id__in = d.keys( ) ).only( "id", "like" )

for i in sqs:
    i.like = d[ i.id ]

より多くのメモリを消費するため、クエリが大きすぎないように注意してください (必要に応じて、このジョブを複数のジョブに分割してください)。

さらに大きなパフォーマンスを得るには、直接 SQL スクリプトを作成してデータベースで実行する必要があります。

于 2012-11-29T15:38:58.690 に答える