2

是否可以使用 Couchbases Java Client 2.2.2 以编程方式创建和发布二级索引?我希望能够创建和发布运行 Couchbase 4.1 的自定义二级索引。我知道这可能与 Couchbase 视图有关,但我找不到索引。

4

4 回答 4

5

需要 couchbase-java-client-2.3.1 以便以编程方式创建主要或次要索引。一些可用的方法可以在bucketManger用于 upsert 视图的相同方法中找到。createIndex此外,可以使用 静态方法,它支持 DSL 和字符串语法

有几个选项可以创建二级索引。

选项1:

Statement query = createIndex(name).on(bucket.name(), x(fieldName));
N1qlQueryResult result = bucket.query(N1qlQuery.simple(query));

选项#2:

String query = "BUILD INDEX ON `" + bucket.name() + "` (" + fieldName + ")";
N1qlQueryResult result = bucket.query(N1qlQuery.simple(query));

选项#3(实际上这里有多个选项,因为方法createN1qlIndex被重载了

bucket.bucketManager().createN1qlIndex(indexName, fields, where, true, false);
于 2016-07-11T17:01:30.833 回答
4

主索引:

// Create a N1QL Primary Index (ignore if it exists)
bucket.bucketManager().createN1qlPrimaryIndex(true /* ignore if exists */, false /* defer flag */);

二级索引:

    // Create a N1QL Index (ignore if it exists)
    bucket.bucketManager().createN1qlIndex(
            "my_idx_1",
            true, //ignoreIfExists
            false, //defer
            Expression.path("field1.id"),
            Expression.path("field2.id"));

或者

    // Create a N1QL Index (ignore if it exists)
    bucket.bucketManager().createN1qlIndex(
            "my_idx_2",
            true, //ignoreIfExists
            false, //defer
            new String ("field1.id"),
            new String("field2.id"));

如果您的文档是这样的,第一个二级索引 (my_idx_1) 会很有帮助:

{
    "field1" : {
        "id" : "value"
    },
    "field2" : {
        "id" : "value"
    }
}

如果您的文档是这样的,第二个二级索引 (my_idx_2) 会很有帮助:

{
    "field1.id" : "value",
    "field2.id" : "value"
}
于 2019-04-17T11:41:26.497 回答
1

一旦你有一个 Bucket,你应该可以用任何 2.x 做到这一点

bucket.query(N1qlQuery.simple(queryString))

queryString 类似于

String queryString = "" + bucketName + "使用 GSI 创建主索引;";

于 2016-07-11T22:00:38.527 回答
1

到目前为止,java-client 3.x+有一个QueryIndexManager(通过 获得cluster.queryIndexes())提供了一个索引 API,该 API 具有以下创建索引的特定方法:

createIndex(String bucketName, String indexName, Collection<String> fields)
createIndex(String bucketName, String indexName, Collection<String> fields, CreateQueryIndexOptions options)
createPrimaryIndex(String bucketName)
createPrimaryIndex(String bucketName, CreatePrimaryQueryIndexOptions options)
于 2022-01-07T17:05:46.567 回答