我试图使用elasticsearch dsl在两个索引文档之间创建一个“关系”。当使用Object(EsPerson)
作为EsComment
的字段时。当我更新EsPerson
时,EsComment
中的字段不会更新。在
我尝试过使用InnerDoc,但它没有索引,也没有更新
class EsPersonAttr(InnerDoc):
id = Long(required=True)
name = Text(fields={'keyword': Keyword()}, required=True)
def __repr__(self):
return '<EsPersonAttr: {}>'.format(
self.name,
)
class EsPersonIndex(Document):
"""
Elastic Search Person model.
"""
class Index:
name = 'es-person'
class meta:
doc_type = 'es-person'
id = Long(required=True)
name = Text(fields={'keyword': Keyword()}, required=True)
def save(self, **kwargs):
return super(EsPersonIndex, self).save(**kwargs)
def __repr__(self):
return '<EsPersonIndex: {}>'.format(
self.name,
)
class EsPerson(object):
def __init__(self, id, name):
self._id = id
self._name = name
self.index_doc = EsPersonIndex(
id=id,
name=name
)
self.attr_doc = EsPersonAttr(
id=id,
name=name
)
def __repr__(self):
return '<EsPerson: {}>'.format(
self._name,
)
@property
def id(self):
return self._id
@id.setter
# Set both Document & InnerDoc at the same time
def id(self, value):
self._id = value
# self.index_doc.id = value
self.index_doc.update()
self.attr_doc.id = value
@property
def name(self):
return self._id
@name.setter
# Set both Document & InnerDoc at the same time
def name(self, value):
self._name = value
self.index_doc.name = value
self.index_doc.save()
self.attr_doc.name = value
class EsComment(Document):
"""
Elastic Search Comment model.
"""
id = Long(required=True)
title = Text(fields={'keyword': Keyword()}, required=True)
text = Text(fields={'keyword': Keyword()})
author = Object(EsPersonAttr, required=True)
class Index:
name = 'es-comment'
class meta:
doc_type = 'es-comment'
def save(self, **kwargs):
# if there is no date, use now
return super(EsComment, self).save(**kwargs)
def __repr__(self):
return '<EsComment: {}>'.format(
self.title,
)
我希望当我更新EsPerson的name字段时,它会更新作者姓名在评论中
您可能想看看使用}的示例,它们是在Elasticsearch中连接对象的两种方法:https://github.com/elastic/elasticsearch-dsl-py/blob/master/examples/parent_child.py
parent
/child
和{相关问题 更多 >
编程相关推荐