2011-11-18 52 views

回答

0

至于我可以在Django的草垛1.2的源代码看看。*你不能做到这一点。您可以编写自己的模式,而不是使用管理命令生成它并使用它。

1

如果您正在使用草堆的build_solr_schema管理命令来创建schema.xml中,请注意,它会自动包括流行的字段类型不同dynamicFields。例如,check out the schema template for Haystack v2.1。 (这看起来像它一直在那里,因为草堆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类的顶部定义。你可能想在评论中提到这一点。

0

由于@nofinator说,你可以在SearchIndex.prepare方法由SOLR Schema.xml前缀concatinating字段名做到这一点。

默认情况下草垛(当前版本。是2.1.1)附带像*_s一些默认DynamicField。但是如果你愿意,你可以制作你自己的DynamicField。

在我的项目生病让attr_*领域,其做工精细。

所有你需要做的,就是在Schema.xml 加入这一领域,具有相同的语法,您可以manualy或压倒一切的非标准草堆做build_solr_schema管理命令。(顺便说一句,它的使用非标准的Django渲染模板FNC。所以它很容易。