Couchbase - Elasticsearch传输插件。使用_class字段

时间:2016-01-12 17:40:58

标签: elasticsearch mapping couchbase transport

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

  

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

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

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

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

在旁注中,如果您的类型基于ID的前缀,则不应使用RegexTypeSelector,而应使用DelimiterTypeSelector。这样您只需指定分隔符(默认情况下为':#39;)它会将所有前缀映射到一个类型。保存您必须为每种类型定义单独的正则表达式。

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