使用现有字段作为 _id 使用 elasticsearch dsl python DocType
use existing field as _id using elasticsearch dsl python DocType
我有 class,我尝试将 student_id
设置为来自 elasticsearch-dsl 文档的 elasticsearch. I am referring persistent example 中的 _id
字段。
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
我通过在 Meta
中设置 id
来绑定,但它不起作用。
我得到解决方案作为覆盖 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
方法?
有几种分配 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 用作文档 _id
(在您的情况下,它可能是 student_id
),但这已经在 1.5 中已弃用,从那时起您必须明确提供 ID 或让 ES 为您选择一个。
我有 class,我尝试将 student_id
设置为来自 elasticsearch-dsl 文档的 elasticsearch. I am referring persistent example 中的 _id
字段。
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
我通过在 Meta
中设置 id
来绑定,但它不起作用。
我得到解决方案作为覆盖 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
方法?
有几种分配 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 用作文档 _id
(在您的情况下,它可能是 student_id
),但这已经在 1.5 中已弃用,从那时起您必须明确提供 ID 或让 ES 为您选择一个。