使用JOIN进行SELECT的Azure CosmosDb延续令牌

问题描述

我正在使用Java库async中的com.azure:azure-cosmos:4.3.0客户端来连接和查询direct mode中的azure cosmosdb(sql)。集合中的所有文档都具有以下结构

{
 "id":"string","timestamp":123456789,"tags":["tag1","tag2"]
}

我想做的是find all documents that have any matching tags from a given list of input tags。最好的方法是什么?

我尝试过的但无法使其正常工作 -

我插入了四个文档进行测试,然后在azure门户-SELECT disTINCT VALUE CONTAINER_ALIAS FROM CONTAINER_ALIAS JOIN CONTAINER_ALIAS_tags IN CONTAINER_ALIAS.tags WHERE CONTAINER_ALIAS_tags IN ( "tag1","tag2" ) AND ( CONTAINER_ALIAS.timestamp BETWEEN 1599773389000 AND 1602365389000 )中运行了该查询。这给了我3个文档作为响应,这是正确的,因为在4个测试文档中,其中一个文档没有“ tag1”或“ tag2”

然后,我尝试使用客户端库生成相同的查询,并且查询到达SELECT disTINCT VALUE CONTAINER_ALIAS FROM CONTAINER_ALIAS JOIN CONTAINER_ALIAS_tags IN CONTAINER_ALIAS.tags WHERE CONTAINER_ALIAS_tags IN ( "tag1","tag2" ) AND ( CONTAINER_ALIAS.timestamp BETWEEN @timestamp_START AND @timestamp_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()

但这只会返回1个文档。但是它确实返回了连续令牌{"lastHash":"","sourcetoken":"{\"token\":null,\"range\":\"{\\\"min\\\":\\\"05C1CFFFFFFFF8\\\",\\\"max\\\":\\\"05C1D7FFFFFFFC\\\",\\\"isMinInclusive\\\":true,\\\"isMaxInclusive\\\":false}\"}"}

我将客户端库与WHERE一起使用,但是没有JOIN,我能够使其正常工作。结果将包括pageSize个文档,如果有更多文档可用,它将返回正确的延续令牌。但是,当我使用join时,我无法获得所有结果

当我从azure门户网站运行上述查询时,我注意到的其他事情是RU,大约是46,但是当我从客户端库中打印日志时,RU大约是2。不确定该信息是否对您有所帮助我在做什么错

请让我知道我在做什么错,或者有更好的方法来实现这一目标

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)