【问题标题】:Couchbase - Elasticsearch transport plugin. Mapping to types using _class fieldCouchbase - Elasticsearch 传输插件。使用 _class 字段映射到类型
【发布时间】:2016-04-17 11:07:03
【问题描述】:

我正在使用带有 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 后出现。我认为这将是更好的解决方案。

感谢您的帮助。

【问题讨论】:

    标签: elasticsearch mapping couchbase transport


    【解决方案1】:

    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: ':'
    

    【讨论】:

    • 谢谢你的回答,它解释了很多。
    猜你喜欢
    • 2016-03-31
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    相关资源
    最近更新 更多