sql - 大型搜索中缺少 Cosmos DB 结果

标签 sql azure-cosmosdb

我想知道我是否达到了导致这种行为的某种限制。我运行了一个查询,证明当按三个字段加上唯一 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 个结果,结果神奇地弹回了结果中...

是否有一些限制可能导致结果被遗漏?

补充说明:

  1. 我正在查询浏览器中对此进行测试
  2. 我已将“设置 -> 每页项目数”更改为“无限制”

最佳答案

即使您“无限制”地运行查询(将 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/

相关文章:

sql - 全文索引需要删除和重新创建 - 为什么?

sql - Java 程序员关于将存储在 .txt 文件中的现有数据库移植到 mySQL 的几个问题?

sql - 如何按列分组

c# - 使用 API 删除和重新创建数据库时,Azure Cosmos DB 上的存储设置不断从“无限制”更改为“固定”

Azure Cosmos DB 存储过程 |选择并返回没有分区 ID 值的多个文档

mysql 查询房间可用性

SQL:如果先前存在计数 > 1,则在给定月份中计数 1

azure - 如何为 cosmosdb 无服务器帐户配置故障转移?

c# - 从 ExecuteStoredProcedureAsync 获取超过 100 个文档

azure - 如何加快从 Azure Data Lake 到 Cosmos DB 的复制速度