0

Django Haystack 需要执行

更新索引

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

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

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 回答