【问题标题】:Django-haystack - how to represent relations in search indexes?Django-haystack - 如何表示搜索索引中的关系?
【发布时间】:2014-04-19 18:04:02
【问题描述】:

所以我正在尝试使用 Django-Haystack(elasticsearch 后端)索引一些项目,索引标准之一是项目上的标签,这是一个 m2m 关系(我实现了自己的自定义解决方案,因为它对我来说更容易比使用 taggit),这是我的模型的样子。

class GalleryTag(models.Model):
    tag = models.CharField(max_length=100, unique=True)
    slug = AutoSlugField(populate_from='tag', unique=True)

    class Meta:
        abstract = True
    def __unicode__(self):
        return self.tag


class Tag(GalleryTag):
    pass


class Artist(GalleryTag):
    pass


class Character(GalleryTag):
    pass

class Gallery(models.Model):    
    characters = models.ManyToManyField(Character, blank=True, related_name='characters')
    artists = models.ManyToManyField(Artist, blank=True, related_name='artists')
    tags = models.ManyToManyField(Tag, blank=True, related_name='tags')
    def __unicode__(self):
        return self.name

我试图索引为可搜索的对象是画廊,我希望能够让标签、艺术家和角色(所有 m2ms)成为它们的可搜索条件之一。我真的找不到任何有关如何使关系可搜索的信息,基本示例仅使用完全平面模型。谢谢。

【问题讨论】:

    标签: python django elasticsearch django-haystack


    【解决方案1】:

    一种方法是在GalleryIndex 的模板文件中提取数据。 比如:

    {% for s in object.hasTags.all %}
    {{t.tag}}
    {% endfor %}
    

    如果由于某种原因,解决您的关系对于模板来说过于复杂,则将一个名为 tags 的字段添加到 GalleryIndex 并添加一个例程 prepare_tags(self, obj) 来查询相关数据、连接并将其作为字符串返回。

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 2011-05-20
      • 2014-07-17
      • 1970-01-01
      • 2014-09-25
      • 2011-03-10
      • 1970-01-01
      • 2014-08-01
      相关资源
      最近更新 更多