java - 在 Azure DocumentDB 上按 ID 进行查询没有响应

标签 java azure azure-cosmosdb nosql

我目前在按 ID 查找集合时遇到非常慢/无响应的情况。我的分区集合中有约 200 万个文档。如果使用partitionKey和id查找文档,响应会立即发生

SELECT * FROM c WHERE c.partitionKey=123 AND c.id="20566-2"

如果我尝试仅使用 id

SELECT * FROM c WHERE c.id="20566-2"

响应永远不会返回,java客户端似乎卡住了,我使用Azure门户中的数据资源管理器也遇到了同样的情况。我还尝试通过不是 id 或partitionKey 的另一个字段进行查找,并且响应总是返回。当我尝试从 Java 客户端进行选择时,我总是设置标志以启用跨分区查询。

接下来要尝试的是避免 ID 中的字符“-”,以测试该字符是否会阻止查询(无论如何我在文档中没有找到任何内容)

最佳答案

该问题与您的 Java 代码有关。由于Azure DocumentDB Java SDK封装了DocumentDB REST API,根据REST API的引用Query Documents ,正如 @DanCiborowski-MSFT 所说,标题 x-ms-documentdb-query-enablecrosspartition 解释了您的问题原因,如下所示。

Header: x-ms-documentdb-query-enablecrosspartition
Required/Type: Optional/Boolean
Description: If the collection is partitioned, this must be set to True to allow execution across multiple partitions. Queries that filter against a single partition key, or against single-partitioned collections do not need to set the header.

因此,您需要设置True以启用跨分区,以便在where子句中没有partitionKey的情况下通过传递类FeedOption的实例来跨多个分区进行查询方法queryDocuments ,如下。

FeedOptions queryOptions = new FeedOptions();
queryOptions.setEnableCrossPartitionQuery(true); // Enable query across multiple partitions
String collectionLink = collection.getSelfLink();
FeedResponse<Document> queryResults = documentClient.queryDocuments(
    collectionLink,
    "SELECT * FROM c WHERE c.id='20566-2'", queryOptions);

关于java - 在 Azure DocumentDB 上按 ID 进行查询没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44386934/

相关文章:

azure - 服务端点是否始终是访问 Azure 资源的最安全方式?

java - 无法让 AutoCompleteTextView 与其他组件一起显示

java - 使用 gson 错误转换 json 预期为 BEGIN_OBJECT 但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY

node.js - 如何使用 Azure 函数绑定(bind)发送计划的服务总线队列消息?

azure - Microsoft Azure - Gulp 3.8.10 不适用于新的 Web 应用程序实例

azure - DocumentDB 模拟器浏览器问题

asp.net-core - 在 Microsoft.Azure.Cosmos.Client 上启用跨分区查询

java - 如何在 Java 中避免 else if 马拉松?

java - Spring OXM 和 Spring Core 之间冲突的解决方法

Azure 表存储查询唯一分区键