【问题标题】:Spring & Couchbase - how to create indexes via codeSpring & Couchbase - 如何通过代码创建索引
【发布时间】:2019-07-08 14:46:03
【问题描述】:

我的 Spring Boot 应用正在使用 Couchbase 5.1 社区。​​p>

我的应用需要一个主索引和多个二级索引。

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

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

有没有办法通过 Spring Data 或 Couchbase 客户端来实现?

【问题讨论】:

标签: java spring-boot spring-data couchbase n1ql


【解决方案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'"))
       ...       
    
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-16
      • 2020-09-08
      • 2017-10-11
      • 2017-07-05
      • 2015-05-27
      • 2020-05-19
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      相关资源
      最近更新 更多