我在我们的django应用程序中使用haystack进行搜索和搜索工作非常良好。但是我有一个关于reamtime搜索的问题。对于实时搜索,我使用haystack的默认RealTimeSignalProcessor(haystack.signals.RealtimeSignalProcessor)。我的模型包含一个多对多的领域。当数据只是为了多个字段而改变时,似乎realtimeignal处理器并没有正确更新索引数据。更新多对多数据后,我的搜索结果出错。Django Haystack索引不适用于模型中的很多很多领域
它在手动运行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
search_index.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 }}
settings.py:
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
我有大海捞针的最新版本,并作为嗖后端。
你能显示代码吗?我也有同样的问题。尝试了一些东西,仍然没有功能工作。使用django-rq我知道了,但我不想使用第三方库来使它工作,如果它可以使用它自己的功能。 –
我们通过采用上述第二种方法解决了这个问题。如果它不适用于你的情况,那么你应该创建一个定制的实时信号处理器。我也尝试了第一种方式。但是那段代码现在并不适合我。但是你可以在这里阅读更多关于它的信息.http://django-haystack.readthedocs.org/en/latest/signal_processors。html – nik