我上课了,我尝试将student_id
设置为elasticsearch中的
_id
字段。我指的是来自elasticsearch-dsl docs的persistent example。
from elasticsearch_dsl import DocType, String
ELASTICSEARCH_INDEX = 'student_index'
class StudentDoc(DocType):
'''
Define mapping for Student type
'''
student_id = String(required=True)
name = String(null_value='')
class Meta:
# id = student_id
index = ELASTICSEARCH_INDEX
我通过在id
中设置Meta
来绑定,但它不起作用。
我得到覆盖save
method的解决方案,我实现了这个
def save(self, **kwargs):
'''
Override to set metadata id
'''
self.meta.id = self.student_id
return super(StudentDoc, self).save(**kwargs)
我正在创建此对象
>>> a = StudentDoc(student_id=1, tags=['test'])
>>> a.save()
有没有直接的方式从Meta
设置而不使用覆盖save
方法?
答案 0 :(得分:4)
有几种方法可以分配ID:
你可以这样做
a = StudentDoc(meta={'id':1}, student_id=1, tags=['test'])
a.save()
像这样:
a = StudentDoc(student_id=1, tags=['test'])
a.meta.id = 1
a.save()
另请注意,在ES 1.5之前,可以specify a field使用Fetching the max value from ROWS in pentaho作为文档_id
(在您的情况下,它可能是student_id
),但这已被弃用在1.5之后,你必须明确提供一个ID或让ES为你挑选一个。