Java 用于加入选择的Azure CosmosDb延续令牌

Java 用于加入选择的Azure CosmosDb延续令牌,java,azure,azure-cosmosdb,azure-cosmosdb-sqlapi,Java,Azure,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我正在使用java库com.azure:azure cosmos:4.3.0中的async客户端以直接模式连接和查询azure cosmosdb(SQL)。集合中的所有文档都具有以下结构 { "id":"string", "timestamp":123456789, "tags":["tag1", "tag2"] } 我想做的是从给定的输入标记列表中查找所有具有匹配标记

我正在使用java库
com.azure:azure cosmos:4.3.0
中的
async
客户端以
直接模式连接和查询azure cosmosdb(SQL)。集合中的所有文档都具有以下结构

{
 "id":"string",
 "timestamp":123456789,
 "tags":["tag1", "tag2"]
}
我想做的是
从给定的输入标记列表中查找所有具有匹配标记的文档
。最好的方法是什么?

我尝试过但无法成功的方法-

我插入了四个要测试的文档,然后在azure portal中运行了此查询-
从CONTAINER\u ALIAS中选择DISTINCT VALUE CONTAINER\u ALIAS加入CONTAINER\u ALIAS\u标签,其中CONTAINER\u ALIAS\u标签位于(“tag1”、“tag2”)和(CONTAINER\u ALIAS.timestamp介于1599773389000和1602365389000之间)
。这给了我3个文档作为响应,这是正确的,因为在4个测试文档中,有一个文档没有“tag1”或“tag2”

然后,我尝试使用客户机库生成相同的查询,结果是
从CONTAINER\u ALIAS中选择DISTINCT VALUE CONTAINER\u ALIAS JOIN CONTAINER\u ALIAS\u tags IN CONTAINER\u ALIAS\u tags IN(“tag1”、“tag2”)和(CONTAINER\u ALIAS.timestamp介于@timestamp\u START和@timestamp\u End之间)

此查询传递到数据库,如下所示

List<SqlParameters> sqlParameters = Arrays.asList(
    new SqlParameter("@timestamp_START", 1599773389000),
    new SqlParameter("@timestamp_End", 1602365389000)
);
SqlQuerySpec sqlQuerySpec = new SqlQuerySpec(query, sqlParameters)
long pageSize=20
container.queryItems(sqlQuerySpec, MyCustomEntity.class)
                    .byPage(continuationToken, pageSize)
                    .take(1)
                    .next()
List sqlParameters=Arrays.asList(
新的SqlParameter(“@timestamp_START”,1599773389000),
新的SqlParameter(“@timestamp_End”,1602365389000)
);
SqlQuerySpec SqlQuerySpec=新的SqlQuerySpec(查询,sqlParameters)
长页面大小=20
container.queryItems(sqlQuerySpec,MyCustomEntity.class)
.byPage(continuationToken,pageSize)
.采取(1)
.next()
但结果中只返回1个文档。但它确实返回了一个延续令牌“{code>{lastHash:”,“sourceToken:“{\'token\”:null,“range\”:\“{\\\\”min\\\”:\\\\“05C1CFFFFFFFF8\\”,\\\\“max\\”:\\\\\“05c1d7fffffffffffc\\”,\\\\\\“isMinInclusive\\”:true,\\\“isMaxInclusive\\”:false}

我使用了带有WHERE但没有JOIN的客户机库,我能够使它正常工作。结果将包括
pageSize
文档数,如果有更多文档可用,它将返回一个适当的延续标记。然而,当我使用join时,我并没有得到所有的结果

我注意到的另一件事是,当我从azure门户运行上述查询时,RU大约为46,但当我从客户端库打印日志时,RU大约为2。不确定这些信息是否有助于找出我做错了什么


请让我知道我做错了什么,或者有没有更好的方法来实现这一点

我想你在寻找的就是这个。该文档显示了将单个给定值与文档中的数组进行比较的示例。我想将给定数组与文档中的数组进行比较。查看该页面中的示例,我不知道如何编写该查询如果给定的输入标记列表仅包含“tag1”和“tag2”,您可以尝试以下SQL:
SELECT*FROM CONTAINER\u ALIAS,其中(ARRAY\u contains(CONTAINER\u ALIAS.tags,'tag1')或ARRAY\u contains(CONTAINER\u ALIAS.tags,'tag2'))和(容器别名。时间戳介于1599773389000和1602365389000之间)