【问题标题】:dynamicField in django-haystack SOLR configdjango-haystack SOLR 配置中的动态字段
【发布时间】:2011-11-18 12:55:04
【问题描述】:

如何配置 search_indexes.py 以索引 django-haystack 中的动态字段。我使用 SOLR 作为 haystack 的搜索引擎。

【问题讨论】:

    标签: solr django-haystack


    【解决方案1】:

    如果您使用 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 类的顶部明确定义。您可能想在评论中提及这一点。

    【讨论】:

      【解决方案2】:

      据我在 django-haystack 1.2.* 的源代码中看到的,你不能这样做。您可以编写自己的架构,而不是使用管理命令生成它并使用它。

      【讨论】:

        【解决方案3】:

        正如@nofinator 所说,您可以在SearchIndex 类的.prepare 方法中执行此操作,方法是将字段名称与SOLR Schema.xml 的前缀连接起来。

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

        在我的项目中让attr_* 字段工作正常。

        您需要做的就是添加此字段,语法与Schema.xml 相同 您可以手动执行或覆盖标准 Haystack build_solr_schema 管理命令。(顺便说一句,它使用标准 django 渲染模板 fnc。所以它很容易。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-05
          • 1970-01-01
          • 1970-01-01
          • 2012-07-17
          • 2014-06-11
          • 1970-01-01
          • 2010-10-17
          相关资源
          最近更新 更多