You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django Elasticsearch DSL自定义分析器遇RedeclaredFieldError报错

问题解决:RedeclaredFieldError 字段重复声明错误

错误原因很明确:你在CarDocument中同时做了两件事——手动定义了name字段,又在Django内部类的fields列表里再次包含name,导致同一个字段被重复声明,触发了RedeclaredFieldError。

修复方案

只保留一种name字段的声明方式即可,推荐保留手动声明的版本(因为你需要自定义ngram_analyzer分析器),移除fields列表里的name:

class CarDocument(Document):
    name = fields.TextField(analyzer=ngram_analyzer)
    class Index:
        name = 'cars'
        settings = {
            'number_of_shards': 1,
            'number_of_replicas': 0,
        }

    class Django:
        model = Car
        # 移除fields中的'name',避免重复声明
        fields = [
            # 这里可以保留其他需要自动映射的模型字段,比如'price', 'year'等
        ]

如果你的Car模型还有其他需要自动同步到Elasticsearch的字段,直接在fields列表里添加即可,只要不和手动声明的字段重复就行。

内容的提问来源于stack exchange,提问作者Numonjon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:40:34