如何配置search_indexes.py以在django-haystack中索引dynamicFields。我正在使用SOLR作为干草堆的搜索引擎。
答案 0 :(得分:1)
如果您使用Haystack的build_solr_schema
管理命令来创建schema.xml,请注意它会自动包含各种常用字段类型的dynamicFields。例如,check out the schema template for Haystack v2.1。 (这看起来就像Haystack v1一样。)
这允许您在搜索索引的prepare方法中创建动态命名的字段。例如,如果您为不断变化的合作伙伴组索引可能具有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类的顶部显式定义。您可以在评论中提及此内容。
答案 1 :(得分:0)
据我所知,在django-haystack 1.2。*的源代码中你不能这样做。您可以编写自己的模式,而不是使用管理命令生成模式并使用它。
答案 2 :(得分:0)
正如@nofinator所述,您可以通过将字段名称与SOLR SearchIndex
的前缀合并,在Schema.xml
类的*_s
方法中执行此操作。
默认情况下,Haystack(当前版本为2.1.1)附带一些默认的DynamicField,如attr_*
。但如果你愿意,你可以制作自己的DynamicField。
在我的项目中,生成Schema.xml
字段并且其工作正常。
您需要做的就是在build_solr_schema
中使用相同的语法添加此字段
你可以用manualy或overstiding standart Haystack TagDetailsFactory
管理命令。(顺便说一句,它使用标准的django渲染模板fnc。所以它很容易。