使用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
相关产品推荐
相关产品推荐

