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

Couchbase - Elasticsearch transport plugin. Mapping to types using _class field

我正在使用带有 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字段的类型和格式,导致解决方案不是"elegant",可能会很麻烦。

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

感谢您的帮助。

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

换个说法,Couchbase中文档的主键就是id。 Elasticseach中文档的主键是_uid,它是通过type和id组合而成的{type}#{id}。我们希望它们匹配,这就是插件以其方式强制执行的原因。

附带说明一下,如果您的类型基于 id 的前缀,则不应使用 RegexTypeSelector,而应使用 DelimiterTypeSelector。这样你只需指定分隔符(默认为':'),它会将所有前缀映射到一个类型。无需为每种类型定义单独的正则表达式。

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