如何仅针对单个模型执行Django Haystack的update_index操作?
如何在Django Haystack中仅针对特定模型执行update_index?
我正在使用Django Haystack将PostgreSQL中的数据同步到Solr集合,已在search_indexes.py中定义了两个模型的索引配置。执行python manage.py update_index时会同时索引两个模型的数据,现需实现仅针对特定模型执行索引更新操作。
当前执行全量索引命令的输出:
Indexing 2 model1 Indexing 12 model2
我的search_indexes.py代码如下:
from haystack import indexes from .models import table1, table2 class model1(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField( document=True, use_template=True, template_name="search/indexes/tenants/table1_text.txt" ) ats_id = indexes.CharField(model_attr='ats_id') ats_name = indexes.CharField(model_attr='ats_name') added_by = indexes.CharField(model_attr='added_by') added_on = indexes.DateTimeField(model_attr='added_on') def get_model(self): return table1 def index_queryset(self, using=None): return self.get_model().objects.all() class model2(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField( document=True, use_template=True, template_name="search/indexes/tenants/table2_text.txt" ) template_id = indexes.CharField(model_attr='template_id') template_name = indexes.CharField(model_attr='template_name') aspect = indexes.CharField(model_attr='aspect') version = indexes.CharField(model_attr='version') added_by = indexes.CharField(model_attr='added_by') added_on = indexes.DateTimeField(model_attr='added_on') ats_id = indexes.CharField(model_attr='ats_id') def get_model(self): return table2 def index_queryset(self, using=None): return self.get_model().objects.all()
解决方案
Django Haystack的update_index命令支持通过应用名.模型名的格式指定要更新的特定模型,具体用法如下:
1. 仅更新单个模型的索引
假设你的模型table1所属的应用名为tenants(从模板路径search/indexes/tenants/推测),执行以下命令即可只更新该模型的索引:
python manage.py update_index tenants.table1
执行后输出只会显示该模型的索引进度,类似:
Indexing 2 model1
2. 同时更新多个特定模型
如果需要更新多个指定模型,直接在命令后依次列出模型的完整标识即可:
python manage.py update_index tenants.table1 tenants.table2
3. 查看详细执行日志
若需要了解索引更新的详细过程,可以添加--verbosity参数(参数值为2时日志最详细):
python manage.py update_index tenants.table1 --verbosity 2
内容的提问来源于stack exchange,提问作者Mahesh
相关产品推荐
相关产品推荐

