django-haystack SOLR配置中的dynamicField

时间:2011-11-18 12:55:05

标签: solr django-haystack

如何配置search_indexes.py以在django-haystack中索引dynamicFields。我正在使用SOLR作为干草堆的搜索引擎。

3 个答案:

答案 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。所以它很容易。