Azure DocumentDB上的ID查询无响应

时间:2017-06-06 09:59:27

标签: java azure azure-cosmosdb nosql

我目前在按ID查找的集合上面临非常慢/无响应。我在分区集合中有大约2百万个文档。如果使用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客户端尝试select时,我总是设置标志以启用跨分区查询。

接下来要尝试避免角色" - "在ID中测试此字符是否阻止查询(无论如何我在文档中找不到任何内容)

1 个答案:

答案 0 :(得分:1)

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

  

标题 x-ms-documentdb-query-enablecrosspartition
  必填 / 类型:可选/布尔
  描述:如果集合已分区,则必须将其设置为True以允许跨多个分区执行。过滤单个分区键或针对单分区集合的查询不需要设置标题。

因此,您需要设置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);