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 允许这样做。
比如说,我有一个具有以下定义的用户模型:
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 允许这样做。