Django Haystack:只更新一个字段

时间:2012-11-29 14:55:14

标签: django list dictionary django-haystack

Django Haystack要求执行

  

update_index

用新数据更新solr索引,所以我一直在想是否有办法只更新/更改一个字段。

这一个字段必须包含最新数据 - 因为它有很多喜欢。有没有办法使用从数据库中检索到的最新值更新sqs字典中的like的值。我现在已经编写了一个脚本,但执行时间太长了:

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

也许有办法加快这个速度?

谢谢!

1 个答案:

答案 0 :(得分: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脚本并在数据库上运行它。