Я использую стог сена в нашем приложении django для поиска, и поиск работает очень хорошо. Но у меня проблема с поиском в реальном времени. Для поиска в реальном времени я использую стог сена по умолчанию RealTimeSignalProcessor (haystack.signals.RealtimeSignalProcessor). Моя модель содержит одно поле «многие ко многим». Когда данные изменяются только для этого поля «многие ко многим», кажется, что процессор сигналов реального времени не обновляет индексирующие данные должным образом. После обновления данных «многие ко многим» я получаю неверный результат поиска.
Он работает после ручного запуска команды reboot_index. Я думаю, что reboot_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'
У меня последняя версия стога сена и свист в качестве серверной части.