【发布时间】:2011-11-18 12:55:04
【问题描述】:
如何配置 search_indexes.py 以索引 django-haystack 中的动态字段。我使用 SOLR 作为 haystack 的搜索引擎。
【问题讨论】:
标签: solr django-haystack
如何配置 search_indexes.py 以索引 django-haystack 中的动态字段。我使用 SOLR 作为 haystack 的搜索引擎。
【问题讨论】:
标签: solr django-haystack
如果您使用 Haystack 的 build_solr_schema 管理命令来创建您的 schema.xml,请注意它会自动包含流行字段类型的各种动态字段。例如,check out the schema template for Haystack v2.1。 (这看起来像是从 Haystack v1 开始就有了。)
这允许您在搜索索引的准备方法中创建动态命名的字段。例如,如果您正在为不断变化的合作伙伴组索引可能具有 id 字符串的注释,您可以这样做:
def prepare(self, obj):
self.prepared_data = super(NoteIndex, self).prepare(obj)
for (partner_name, partner_id) in get_partners():
self.prepared_data['%s_s' % partner_name] = partner_id
return self.prepared_data
这里的关键是字段名称以“_s”结尾,根据架构是字符串类型的动态名称。
很遗憾,这些动态合作伙伴字段并未在 SearchIndex 类的顶部明确定义。您可能想在评论中提及这一点。
【讨论】:
据我在 django-haystack 1.2.* 的源代码中看到的,你不能这样做。您可以编写自己的架构,而不是使用管理命令生成它并使用它。
【讨论】:
正如@nofinator 所说,您可以在SearchIndex 类的.prepare 方法中执行此操作,方法是将字段名称与SOLR Schema.xml 的前缀连接起来。
默认情况下,Haystack(当前版本为 2.1.1)附带一些默认的 DynamicField,例如 *_s。但是,如果您愿意,您可以制作自己的 DynamicField。
在我的项目中让attr_* 字段工作正常。
您需要做的就是添加此字段,语法与Schema.xml 相同
您可以手动执行或覆盖标准 Haystack build_solr_schema 管理命令。(顺便说一句,它使用标准 django 渲染模板 fnc。所以它很容易。
【讨论】: