arangodb-river-elasticsearch - _mapping mismatch

时间:2015-04-01 20:45:53

标签: arangodb elasticsearch-plugin

为组合对象创建河流时,生成的_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取消引用嵌套对象或正确设置映射以使用引用?

1 个答案:

答案 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)