如何以编程方式使用 Java 客户端创建和发布索引
How to create and publish Index using Java Client Programatically
是否可以使用 Couchbases Java 客户端 2.2.2 以编程方式创建和发布二级索引?我希望能够创建和发布我的自定义二级索引 运行 Couchbase 4.1。我知道这可能与 Couchbase Views 有关,但我找不到相同的索引。
需要 couchbase-java-client-2.3.1 才能以编程方式创建主要索引或次要索引。一些可用的方法可以在用于更新视图的 bucketManger
上找到。另外可以使用静态方法 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);
一旦你有了一个 Bucket
,你应该可以对任何 2.x 执行此操作
bucket.query(N1qlQuery.simple(queryString))
其中 queryString 类似于
字符串查询字符串 = "CREATE PRIMARY INDEX ON " + bucketName + "
USING GSI;";
主索引:
// 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"
}
从 java-client 3.x+
开始,有一个 QueryIndexManager
(通过 cluster.queryIndexes()
获得),它提供索引 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)
是否可以使用 Couchbases Java 客户端 2.2.2 以编程方式创建和发布二级索引?我希望能够创建和发布我的自定义二级索引 运行 Couchbase 4.1。我知道这可能与 Couchbase Views 有关,但我找不到相同的索引。
couchbase-java-client-2.3.1 才能以编程方式创建主要索引或次要索引。一些可用的方法可以在用于更新视图的 bucketManger
上找到。另外可以使用静态方法 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);
一旦你有了一个 Bucket
,你应该可以对任何 2.x 执行此操作bucket.query(N1qlQuery.simple(queryString))
其中 queryString 类似于
字符串查询字符串 = "CREATE PRIMARY INDEX ON " + bucketName + "
USING GSI;";
主索引:
// 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"
}
从 java-client 3.x+
开始,有一个 QueryIndexManager
(通过 cluster.queryIndexes()
获得),它提供索引 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)