Java 春季及;Couchbase-如何通过代码创建索引

Java 春季及;Couchbase-如何通过代码创建索引,java,spring-boot,spring-data,couchbase,n1ql,Java,Spring Boot,Spring Data,Couchbase,N1ql,我的Spring Boot应用程序使用Couchbase 5.1社区 我的应用程序需要一个主索引和几个辅助索引 目前,为了创建所需的索引,我访问UI和query页面并手动创建应用程序需要的索引 我一直在寻找一种通过代码自动完成的方法,因此当应用程序启动时,它将检查索引是否丢失,并在需要时创建索引 有没有办法通过Spring数据或Couchbase客户端来实现这一点?您可以使用index类中的DSL来创建它们。在“”下的文档中有一个使用它的示例 从这个例子来看: 您还可以在JSON的特定字段上创建

我的Spring Boot应用程序使用Couchbase 5.1社区

我的应用程序需要一个主索引和几个辅助索引

目前,为了创建所需的索引,我访问UI和
query
页面并手动创建应用程序需要的索引

我一直在寻找一种通过代码自动完成的方法,因此当应用程序启动时,它将检查索引是否丢失,并在需要时创建索引


有没有办法通过Spring数据或Couchbase客户端来实现这一点?

您可以使用index类中的DSL来创建它们。在“”下的文档中有一个使用它的示例

从这个例子来看:

您还可以在JSON的特定字段上创建二级索引, 为了获得更好的性能:

Index.createIndex(“Index\u name”).on(bucket.name(),“field\u to\u Index”)

在本例中,为索引指定一个名称,指定目标bucket和 要索引的JSON中的字段


如果索引已经存在,则会出现一个
索引ReadyExistsException
(),因此您需要检查该异常。

因此我就是这样解决它的:

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'"))
   ...       

}

}
import com.couchbase.client.java.Bucket;
公共类数据库存储库{
私人水桶;
公共MyCuchBaseRepository(myRepository){
bucket=myRepository.getCouchbaseOperations().getCouchbaseBucket();
createindex();
}
私有void createindex(){
bucket.bucketManager().createN1qlPrimaryIndex(真、假)
query(N1qlQuery.simple(“在`myBucket`(userId)上创建索引xyz,其中`u class='com.example.User'))
...       
}
}

这在N1QL查询中应该是可能的-