【问题标题】:Batch update a document in solr (django webapp)在 solr (django webapp) 中批量更新文档
【发布时间】:2016-03-14 05:24:02
【问题描述】:

我在 mysql 中有几个表,我在 solr 中对它们进行了非规范化和索引。这意味着来自多个表的行在 solr 中形成一个文档。当请求到来时,它可能会更新 mysql 中的多个表,但我的目标是向 solr 发出单个请求以更新每个请求的索引。我查看了 django 信号以与 mysql 同步索引。但它不会达到对 solr 索引进行一次更新的目的。我应该研究的其他选择是什么?理想的方法是什么?

【问题讨论】:

    标签: django solr celery


    【解决方案1】:

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

    @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。现在我正在使用一个键值对。如果我想在一个请求中刷新多个文档,我可以使用一组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 2021-12-13
      • 2016-01-01
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      相关资源
      最近更新 更多