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

Django haystack - Create multiple indexes for the same model

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

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 具有与指定模型的一对一映射,因此这似乎是不可能的。

所以,一种方法是将所有配置添加到同一个索引中并根据需要过滤它们,有没有其他更简洁的方法,我不必混合使用它们两者?

提前感谢您的回复!

我一直在寻找同一个问题的答案,并且我尝试遵循 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),它甚至在两个连接中找到相同的模型,所以这似乎也不可行。

虽然我不能肯定地回答说这是不可能的,但我认为大多数明显的途径都被排除在外。

更新

阅读了有关此内容后,您似乎可以通过在 Haystack 的 github 问题上使用 proxy model. See this issue 来欺骗 Haystack 允许这样做。