我在我们的 django 应用程序中使用 haystack 进行搜索,搜索工作得很好。但是我遇到了实时搜索的问题。对于实时搜索,我使用的是 haystack 的默认 RealTimeSignalProcessor(haystack.signals.RealtimeSignalProcessor)。我的模型中包含一个多对多字段。当仅针对这个多对多字段更改数据时,实时信号处理器似乎没有正确更新索引数据。更新多对多数据后,我得到错误的搜索结果。
它在手动运行rebuild_index 命令后工作。我认为rebuild_index 正在工作,因为它首先进行清理,然后再次构建索引数据。
有人可以提出一些解决问题的方法吗?
顺便说一下,以下是围绕它的代码。
模型:
class Message_forum(models.Model):
message = models.ForeignKey(Message)
tags = models.ManyToManyField(Tag, blank=True, null=True) #this is many to many field
搜索索引.py:
class Message_forumIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.EdgeNgramField(document=True, use_template=True)
message = indexes.CharField(model_attr='message', null=True)
tags = indexes.CharField(model_attr='tags', null=True)
def get_model(self):
return Message_forum
def index_queryset(self, using=None):
return self.get_model().objects.all()
def prepare_tags(self, obj):
return [tag.tag for tag in obj.tags.all()]
索引模板:
{{ object.tags.tag }}
设置.py:
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
我有最新版本的 haystack 和 whoosh 作为后端。