検索用のdjangoアプリケーションでhaystackを使用していますが、検索は非常にうまく機能しています。しかし、リアルタイム検索に問題があります。リアルタイム検索には、haystack のデフォルトの RealTimeSignalProcessor(haystack.signals.RealtimeSignalProcessor) を使用しています。私のモデルには、多対多のフィールドが 1 つ含まれています。この多対多フィールドのみのデータが変更された場合、リアルタイム シグナル プロセッサがインデックス データを適切に更新していないようです。多対多のデータを更新した後、間違った検索結果が表示されます。
手動で rename_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'
バックエンドとして haystack と whoosh の最新バージョンを使用しています。