arangodb-river-elasticsearch -- _mapping 不匹配
arangodb-river-elasticsearch -- _mapping mismatch
为组合对象创建河流时,生成的 _mapping
是使用完整的嵌套对象定义而不是字符串字段设置的。这会导致数据导入失败,因为对象引用不是 "dereferenced".
例如
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 取消对嵌套对象的引用或正确设置映射以使用引用?
河流现已弃用。我为 elasticsearch 创建了一个 mixin,它在我 save/update/delete 对象(通过我的自定义 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)
为组合对象创建河流时,生成的 _mapping
是使用完整的嵌套对象定义而不是字符串字段设置的。这会导致数据导入失败,因为对象引用不是 "dereferenced".
例如
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 取消对嵌套对象的引用或正确设置映射以使用引用?
河流现已弃用。我为 elasticsearch 创建了一个 mixin,它在我 save/update/delete 对象(通过我的自定义 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)