com.couchbase.client, java-client
バージョンを使用2.2.7
して、パラメーター化された IN 句を使用する n1ql セカンダリ インデックスを機能させることができませんでした。以下のインデックス、クエリ、および Java コードの例を参照してください。
索引
CREATE INDEX `indexName` ON `bucketName`(id,docType) USING GSI ;
クエリ
public static final String COUNT_STATEMENT = "select count(*) as count " +
"from bucketName " +
"where docType = 'docId' " +
"and id IN $ids " +
"and publishTimestamp between $startTime and $endTime";
クエリを送信するコード
public int getCountForDuration(Long startTime, Long endTime, Collection<String> ids){
List<String> idList = new ArrayList<>(ids);
JsonObject placeHolders = JsonObject.create()
.put("ids", JsonArray.from(idList))
.put("startTime", startTime)
.put("endTime", endTime);
N1qlQuery query = N1qlQuery.parameterized(COUNT_STATEMENT, placeHolders)
N1qlQueryResult result = bucket.query(query);
...
}
パラメータ化を追加する前は、このセカンダリ インデックスはクエリで正しく使用されていました。また、プライマリ インデックスを使用すると、クエリが機能します。
私の質問は、クエリで使用されるセカンダリ インデックスを作成する方法です。