在solr中批量更新文档(django webapp)

时间:2016-03-14 05:24:03

标签: django solr celery

我在mysql中有几个表,我已经在solr中进行了非规范化索引。这意味着来自多个表的行在solr中形成一个文档。当一个请求到来时,它可能会更新mysql中的多个表,但我的目标是触发一个请求solr来更新每个请求的索引。我已经看过django信号来与mysql同步索引。但它不会用于solr索引的一次更新。我应该研究哪些其他选择?这样做的理想方式是什么?

1 个答案:

答案 0 :(得分:0)

我能够通过为所有模型添加公共信号处理程序来实现上述目标

@receiver(post_save, sender=Model1)
@receiver(post_save, sender=Model2)
@receiver(post_save, sender=Model3)
def handler(sender, instance, created, **kwargs):
    redis_connection.set(current_thread().name, instance.id)

然后在SolrUpdateMiddleware

class SolrUpdateMiddleware(object):
    def process_response(self, request, response):
        id = redis_connection.get(current_thread().name)
        update_solr(id)
        redis_connection.delete(current_thread().name)
        return response

现在,对于特定请求,只有一个更新将转到solr。现在我正在使用键值对。如果我想在一个请求中刷新多个文档,我可以使用一个集合。