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
也许有办法加快这个速度?
谢谢!
答案 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脚本并在数据库上运行它。