Django haystack - 为同一模型创建多个索引

时间:2015-02-17 12:04:25

标签: django django-haystack

说,我有一个具有以下定义的用户模型:

class User(models.Model):
    username = models.CharField(max_length=30, unique=True)
    email = models.EmailField(max_length=255)
    first_name = models.CharField(max_length=30, blank=True, default='')
    last_name = models.CharField(max_length=30, blank=True, default='')
    user_role = models.IntegerField(choices=USER_CHOICES, default=USER_ROLE)

现在,我想为用户创建两个单独的索引:AdminUserIndex和UserIndex,每个索引具有不同的字段和配置集,但派生自相同的用户模型。

根据文档和测试,Haystack与指定模型具有一对一映射,因此这似乎不可能。

所以,一种方法是在同一个索引中添加所有配置并根据需要过滤它们,还有其他更清洁的方法,我不必混合它们中的两个吗?

感谢您提前回复!

1 个答案:

答案 0 :(得分:2)

我一直在寻找这个问题的答案,并且我已经尝试过遵循Haystack给我的错误的建议。

首先,它绝对不可能在同一个连接上有多个索引(记录在案)。但是,错误消息意味着我可以排除索引。在你的情况下,这将是:

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
        'URL': 'http://localhost:9001/solr/default',
        'EXCLUDE_INDEXES': ['path.to.AdminUserIndex'],
    },
    'admin': {
        'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
        'PATH': 'http://localhost:9001/solr/default',
        'EXCLUDE_INDEXES': ['path.to.UserIndex'],
    },
}

然而,Haystack调用unified_index.get_index(model),即使在两个连接中也找到相同的模型,所以这似乎也是一个禁忌。

虽然我无法回答它是不可能的,但我认为大多数明显的途径都被排除在外。

更新

在阅读了这篇文章之后,似乎你可以通过使用proxy model来欺骗Haystack。有关Haystack的github问题,请参阅this issue