我正在开发一个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
,它就无法工作,自动完成名称。
如何解决此问题?
答案 0 :(得分:1)
您定义了与完成提示器一起使用的name_complete字段,但是使用了不受支持的参数有效负载see documentations 17。因此解决方法是删除该参数。