Spring & Couchbase - 如何通过代码创建索引
Posted
技术标签:
【中文标题】Spring & Couchbase - 如何通过代码创建索引【英文标题】:Spring & Couchbase - how to create indexes via code 【发布时间】:2019-07-08 14:46:03 【问题描述】:我的 Spring Boot 应用正在使用 Couchbase 5.1 社区。p>
我的应用需要一个主索引和多个二级索引。
目前,为了创建所需的索引,我访问 UI 和 query
页面并手动创建应用程序所需的索引 as described here。
我一直在寻找一种通过代码自动执行此操作的方法,因此当应用程序启动时,它会检查索引是否丢失,并在需要时创建它们。
有没有办法通过 Spring Data 或 Couchbase 客户端来实现?
【问题讨论】:
这应该可以通过 N1QL 查询实现 - docs.couchbase.com/sdk-api/couchbase-java-client-2.5.6/com/… 【参考方案1】:您可以使用索引类中的 DSL 创建它们。在“Indexing the Data: N1QL & GSI”下的文档中有一个使用它的示例
从那个例子:
您还可以在 JSON 的特定字段上创建二级索引, 为了获得更好的性能:
Index.createIndex("index_name").on(bucket.name(), "field_to_index")
在这种情况下,为您的索引命名,指定目标存储桶和 JSON 中要索引的字段。
如果索引已经存在,就会有一个IndexAlreadyExistsException
(see documentation),所以你需要检查它。
【讨论】:
【参考方案2】:所以我就是这样解决的:
import com.couchbase.client.java.Bucket;
public class MyCouchBaseRepository
private Bucket bucket;
public MyCouchBaseRepository(<My Repository that extends CouchbasePagingAndSortingRepository> myRepository)
bucket = myRepository.getCouchbaseOperations().getCouchbaseBucket();
createIndices();
private void createIndices()
bucket.bucketManager().createN1qlPrimaryIndex(true, false)
bucket.query(N1qlQuery.simple("CREATE INDEX xyz ON `myBucket`(userId) WHERE _class = 'com.example.User'"))
...
【讨论】:
以上是关于Spring & Couchbase - 如何通过代码创建索引的主要内容,如果未能解决你的问题,请参考以下文章
Spring认证中国教育管理中心-Spring Data Couchbase教程三
是否可以将Spring Data Couchbase映射到外部文档(来自依赖)?