elasticsearch.exceptions.RequestError:[name_complete]的映射定义具有不受支持的参数:[payloads:true]

时间:2017-08-31 14:09:21

标签: django elasticsearch

我正在开发一个Django项目,我有3个模型。学生,大学,课程。我设置了模型,填充了数据库并尝试使用Elastic Search进行搜索。 所以,我安装了Elastic Search version 5.5.0。以下是Meta class的{​​{1}}。

models.py

class Meta: es_index_name = 'django' es_type_name = 'student' es_mapping = { 'properties': { 'university': { 'type': 'object', 'properties': { 'name': {'type': 'string', 'index': 'not_analyzed'}, } }, 'first_name': {'type': 'string', 'index': 'not_analyzed'}, 'last_name': {'type': 'string', 'index': 'not_analyzed'}, 'age': {'type': 'short'}, 'year_in_school': {'type': 'string'}, 'name_complete': { 'type': 'completion', 'analyzer': 'simple', 'payloads': True, 'preserve_separators': True, 'preserve_position_increments': True, 'max_input_length': 50, }, "course_names": { "type": "string", "store": "yes", "index": "not_analyzed", }, } } def get_es_name_complete(self): return { "input": [self.first_name, self.last_name], "output": "%s %s" % (self.first_name, self.last_name), "payload": {"pk": self.pk}, } 在文件的顶部定义如下:

es_index_name, es_type_name, es_mapping

要将数据库中的所有数据批量推送到索引,我有一个名为import django.db.models.options as options options.DEFAULT_NAMES = options.DEFAULT_NAMES + ( 'es_index_name', 'es_type_name', 'es_mapping' ) 的命令文件。当我按push-to-index.py执行时,会产生以下错误:

python manage.py push-to-index

所以我查看了Google,发现elasticsearch.exceptions.RequestError: TransportError(400, mapper_parsing_exception', Mapping definition for [name_complete] has unsupported parameters: [payloads : true]') 不再支持payloads。 我找到了here,他写道他伪造version 5.5.0这样的选项: payload。所以我跟着它,但在这样做时,我又收到了一条错误payload: { type: 'object', enabled: false }。如果我从元类和方法'enabled' is an unresolved issue中删除payloads,它就无法工作,自动完成名称。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

您定义了与完成提示器一起使用的name_complete字段,但是使用了不受支持的参数有效负载see documentations 17。因此解决方法是删除该参数。