为组合对象创建河流时,生成的_mapping
设置为完整的嵌套对象定义而不是字符串字段。这会导致数据导入失败,因为对象引用不是“解除引用”。
E.g。
collection1: {name: "test", items: [collection2/123, collection2/124] }
collection1: {somefield: "test"}
在单个索引中为这些集合创建河流后生成的_mapping
是:
collection1: {name: String, items: { properties: { somefield: String } } }.
导入数据失败,并显示以下错误:
org.elasticsearch.index.mapper.MapperParsingException: object mapping [items] trying to serialize a value with no field associated with it, current value [collection1/123]
如何告诉arango db river取消引用嵌套对象或正确设置映射以使用引用?
答案 0 :(得分:1)
Rivers现已弃用。我为elasticsearch创建了一个mixin,当我保存/更新/删除对象时(通过我的自定义ODM)更新索引。
只需使用可以更新ES索引的高级功能,使自己成为数据访问层的包装器。
例如:
class Base(ArangoBase, es.Base):
def save(self):
ret = ArangoBase.save(self)
es.Base.save_es(self)
return ret
def update(self):
ret = ArangoBase.update(self)
es.Base.save_es(self)
return ret
def delete(self):
ret = ArangoBase.delete(self)
es.Base.delete_es(self)
return ret
from elasticsearch import Elasticsearch
class Base(object):
_es = None
_es_index = 'chopchop'
_es_type = None
def save_es(self):
self._es.index(index=self._es_index, doc_type=self._es_type, body=self._doc(), id=self.id)
def delete_es(self):
self._es.delete(index=self._es_index, doc_type=self._es_type, id=self.id)