使用=AND(NOT(ISBLANK(A1)),LEN(A1)=0)
版本com.couchbase.client, java-client
我无法获得使用参数化IN子句的n1ql二级索引。请参阅下面的示例索引,查询和Java代码
索引
2.2.7
查询
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";
在添加参数化之前,我的查询正确使用了这个二级索引。如果我使用主索引,我的查询也有效。
我的问题是如何创建二级索引 将由我的查询使用。
答案 0 :(得分:2)
我通过添加额外的is not missing
子句来解决这个问题,并且出于某种原因,这解决了这个问题。同样的解决方案在我的通行证中起作用。这是更新的查询:
public static final String COUNT_STATEMENT = "select count(*) as count " +
"from bucketName " +
"where id is not missing " +
"and docType = 'docId' " +
"and id IN $ids " +
"and publishTimestamp between $startTime and $endTime";
@Ben Wilde评论 -
“需要”缺少“的原因是因为第一次进入 索引(在'this'case id中)不能丢失。所以有的文件 缺少的id不会出现在索引中,所以如果你不使用字段 已经受索引设置的条件限制,那么你 必须指明它不会丢失,以确保可以去 你的二级索引“
答案 1 :(得分:2)
索引中的第一个条目(在您的情况下为id
)不能丢失。因此,缺少id
的文档将不在索引中。因此,如果您不使用已受索引条件约束的字段,则必须指定它不会丢失,以确保可以转到您的二级索引。
e.g。您可以使用type="entityType"
CREATE INDEX `indexName` ON `bucketName`(type) WHERE `type`="entityType"