我正在使用带有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 回答
Couchbase中的文档ID是不可变的,这就是类型选择器基于它的原因 . 基于某些可变属性(例如字段)的类型将允许将Couchbase中的同一文档索引到Elasticsearch中的多个文档 . 这意味着数据完整性的损失 .
换句话说,Couchbase中文档的主键是id . Elasticseach中文档的主键是_uid,它是通过将类型和id组合为
{type}#{id}
而创建的 . 我们希望它们匹配,这就是插件以它的方式强制执行的原因 .另外,如果您的类型基于id的前缀,则不应使用
RegexTypeSelector
,而应使用DelimiterTypeSelector
. 这样你只需要指定分隔符(默认为':'),它会将所有前缀映射到一个类型 . 保存您必须为每种类型定义单独的正则表达式 .