我目前在按 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/