【发布时间】:2016-03-14 05:24:02
【问题描述】:
我在 mysql 中有几个表,我在 solr 中对它们进行了非规范化和索引。这意味着来自多个表的行在 solr 中形成一个文档。当请求到来时,它可能会更新 mysql 中的多个表,但我的目标是向 solr 发出单个请求以更新每个请求的索引。我查看了 django 信号以与 mysql 同步索引。但它不会达到对 solr 索引进行一次更新的目的。我应该研究的其他选择是什么?理想的方法是什么?
【问题讨论】:
我在 mysql 中有几个表,我在 solr 中对它们进行了非规范化和索引。这意味着来自多个表的行在 solr 中形成一个文档。当请求到来时,它可能会更新 mysql 中的多个表,但我的目标是向 solr 发出单个请求以更新每个请求的索引。我查看了 django 信号以与 mysql 同步索引。但它不会达到对 solr 索引进行一次更新的目的。我应该研究的其他选择是什么?理想的方法是什么?
【问题讨论】:
我能够通过为所有模型添加一个通用信号处理程序来实现上述目标
@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。现在我正在使用一个键值对。如果我想在一个请求中刷新多个文档,我可以使用一组。
【讨论】: