如何通过Java客户端在XDCR集合映射规则中添加过滤表达式
使用Java SDK为XDCR集合映射规则配置独立过滤表达式
要实现为每个XDCR集合映射规则单独设置过滤表达式,核心是通过Couchbase Java SDK操作ReplicationBucketSettings中的CollectionMapEntry对象,为每个映射规则绑定专属过滤逻辑,具体实现如下:
实现步骤
- 初始化集群与Bucket连接:建立到源集群的连接,获取需要配置XDCR的源Bucket实例。
- 获取目标集群的XDCR复制配置:通过源Bucket的设置,获取指向目标集群的复制策略。
- 遍历配置集合映射规则:针对每个
CollectionMapEntry(集合映射规则),根据源/目标集合名称匹配,设置对应的过滤表达式。 - 提交更新生效:将修改后的复制策略重新提交到集群,使配置生效。
代码示例
// 初始化集群连接 Cluster cluster = Cluster.connect("your-cluster-endpoint", "admin-username", "admin-password"); Bucket sourceBucket = cluster.bucket("source-bucket-name"); // 获取指向目标集群的XDCR复制配置 String targetClusterUuid = "your-target-cluster-uuid"; String targetBucketName = "target-bucket-name"; ReplicationBucketSettings replicationSettings = sourceBucket.settings().replicationTo(targetClusterUuid, targetBucketName); // 获取所有集合映射规则列表 List<CollectionMapEntry> collectionMapEntries = replicationSettings.collectionMaps(); // 为每个映射规则设置独立过滤表达式 for (CollectionMapEntry entry : collectionMapEntries) { // 按源集合名称匹配规则 switch (entry.sourceCollection()) { case "source-collection-1": // 过滤规则1:仅复制status字段为"active"的文档 entry.filterExpression("status = 'active'"); break; case "source-collection-2": // 过滤规则2:仅复制create_time晚于2024-01-01的文档 entry.filterExpression("create_time > '2024-01-01T00:00:00Z'"); break; default: // 无需过滤的规则可设置为空或保持原有配置 entry.filterExpression(null); } } // 提交更新后的复制策略 sourceBucket.settings().replaceReplicationTo(targetClusterUuid, replicationSettings); // 关闭集群连接(建议放在finally块中) cluster.disconnect();
关键注意事项
- SDK版本要求:必须使用Couchbase Java SDK 3.0及以上版本,该版本开始支持集合级别的XDCR过滤配置。
- 过滤表达式语法:遵循Couchbase N1QL过滤规则,注意字段名、数据类型匹配(比如字符串需加单引号,日期需符合ISO格式)。
- 映射规则前提:配置过滤前,需确保源Bucket与目标Bucket之间已创建好对应的集合映射关系。
- 匹配维度:除了按源集合名称匹配,也可通过
entry.targetCollection()按目标集合名称设置过滤规则,按需调整。
内容的提问来源于stack exchange,提问作者user2425109
相关产品推荐
相关产品推荐

