我有一些项目,我正在使用Django-haystack(elasticsearch后端)进行索引以进行搜索。这很好用,但用户可以收藏这些项目,我希望用户能够搜索他们的收藏,就像他们能够搜索所有项目一样。最喜欢的是通过关系表示多对多,因为我需要在用户收藏项目时记录时间。是否有任何方法可以使用haystack搜索用户收藏夹?我不想为每个用户的收藏夹生成单独的索引,因为它们将是还原的,因为这些项目是相同的并且已经由主索引编制索引。以下是我的模型和搜索索引的参考资料:
class Gallery(models.Model):
faves = models.ManyToManyField(
User, through='Favorite', null=True, related_name="faves")
class Favorite(models.Model):
user = models.ForeignKey(User)
gallery = models.ForeignKey(Gallery)
date = models.DateField(auto_now_add=True)
class Meta:
ordering = ["date"]
class GalleryIndex(indexes.SearchIndex, indexes.Indexable):
def get_model(self):
return Gallery
感谢。
答案 0 :(得分:0)
您需要查看RelatedSearchQuerySet(http://django-haystack.readthedocs.org/en/latest/searchqueryset_api.html#relatedsearchqueryset)。请务必阅读页面上有关性能影响的警告;我只是试过这个,它明显慢于大多数查询。
你会想要这样的东西:
from django.contrib.auth.models import User
from haystack.query import RelatedSearchQuerySet
from .models import Gallery
u = User.objects.get(...)
sqs = RelatedSearchQuerySet().load_all()
sqs = sqs.load_all_queryset(Gallery, u.faves.all())
这应该会给你一个只包含用户收藏夹的SearchQuerySet,你可以进一步过滤和搜索。