我想知道我是否达到了导致这种行为的某种限制。我运行了一个查询,证明当按三个字段加上唯一 ID 过滤时,Cosmos DB 文档集合中存在一条记录,但是当我删除唯一 ID 时,我得到 124 个结果,其中没有一个是原始记录。
如果我在 Azure 门户中运行以下实时查询,我会得到一个结果,这是我期望的项目:
-- 1 result, item 'ABCD-EFGH-IJKL-MNOP' present and correct
SELECT
*
FROM a
WHERE a.width = 205
AND a.height = 55
AND a.depth = 16
AND a.uniqueId = 'ABCD-EFGH-IJKL-MNOP'
当我删除最后一行时,我得到了 124 个结果,但没有唯一 ID 为“ABCD-EFGH-IJKL-MNOP”的项目。
-- 124 results, item 'ABCD-EFGH-IJKL-MNOP' missing
SELECT
*
FROM a
WHERE a.width = 205
AND a.height = 55
AND a.depth = 16
每条记录实际上都很大,因为文档包含了相当多的信息。如果我再次将查询更改为:
-- 150 results, item 'ABCD-EFGH-IJKL-MNOP' present and correct
SELECT
a.width,
a.height,
a.depth,
a.uniqueId
FROM a
WHERE a.width = 205
AND a.height = 55
AND a.depth = 16
我得到了 150 个结果,结果神奇地弹回了结果中...
是否有一些限制可能导致结果被遗漏?
补充说明:
- 我正在查询浏览器中对此进行测试
- 我已将“设置 -> 每页项目数”更改为“无限制”
最佳答案
即使您“无限制”地运行查询(将 FeedOptions.MaxItemCount
设置为 -1
),结果仍然可以根据数据量进行分页回来了。
您可以检测到这一点,因为标志 Has More Results
返回 true
:
if (queryable.HasMoreResults)
{
//... there are more results
}
在运行无限制查询时,您可能不会想到这一点。
如果您使用的是 REST API,则有一个 header :
x-ms-continuation=randomlookingstring
您可以在后续请求中传回此 header ,查询将恢复。
我目前正在寻找有关限制的文档,并会在找到时进行更新。
关于sql - 大型搜索中缺少 Cosmos DB 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47059352/