首页 文章

Couchbase - Elasticsearch传输插件 . 使用_class字段映射到类型

提问于
浏览
1

我正在使用带有elasticsearch传输插件的couchbase . 我的问题是将couchbase文档映射到elasticsearch类型 . 可以将其映射添加到elasticsearch.yml:

couchbase.typeSelector:org.elasticsearch.transport.couchbase.capi.RegexTypeSelector couchbase.typeSelector.documentTypesRegex.type:^ type: . $

然后在具有id“type:123”的couchbase中的文档在elasticsearch中转换为“type”类型 .

我不满足于这个解决方案,因为它确定了couchbase中ID字段的类型和格式,并且导致解决方案不“优雅”,并且可能很麻烦 .

可以使用例如“_class”字段映射文档吗?使用Java API将文档插入couchbase后出现此字段 . 我认为这将是更好的解决方案 .

谢谢你的帮助 .

1 回答

  • 2

    Couchbase中的文档ID是不可变的,这就是类型选择器基于它的原因 . 基于某些可变属性(例如字段)的类型将允许将Couchbase中的同一文档索引到Elasticsearch中的多个文档 . 这意味着数据完整性的损失 .

    换句话说,Couchbase中文档的主键是id . Elasticseach中文档的主键是_uid,它是通过将类型和id组合为 {type}#{id} 而创建的 . 我们希望它们匹配,这就是插件以它的方式强制执行的原因 .

    另外,如果您的类型基于id的前缀,则不应使用 RegexTypeSelector ,而应使用 DelimiterTypeSelector . 这样你只需要指定分隔符(默认为':'),它会将所有前缀映射到一个类型 . 保存您必须为每种类型定义单独的正则表达式 .

    couchbase.typeSelector: org.elasticsearch.transport.couchbase.capi.DelimiterTypeSelector
    couchbase.typeSelector.documentTypeDelimiter: ':'
    

相关问题