2017-06-06 4 views
1

IDで検索しているコレクションで、現在非常に遅い/応答なしです。私は分割されたコレクションに〜2百万の文書を持っています。私は唯一のIDAzure DocumentDBのIDによるクエリで応答がありません

SELECT * FROM c WHERE c.id="20566-2" 
応答を返すことはありません

を使用してみた場合

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

応答が即時でのPartitionKeyとidを使用してドキュメントを検索する場合は、Javaクライアントがフリーズようで、私が使用して同じような状況を持っていますAzure PortalのデータエクスプローラidやpartitionKeyではない別のフィールドを参照しようとしましたが、レスポンスは常に返されます。 Javaクライアントからselectを試すと、私は常にクロスパーティションクエリを有効にするフラグを設定します。

しようとする次のものが文字を避けるためです「 - 」IDにこの文字ブロック場合、クエリをテストするために(とにかく私はマニュアルの何かを見つけられませんでした)

+0

ポータルから同じクエリを実行できますか? – Mikhail

+0

ポータルからの同じクエリは何も返しません –

+0

あなたのJavaコードを追加できますか?私はそれをもっと助けることができます...大まかに、パーティションテーブルを照会するときは、パーティションキーを提供するか、クロスパーティションクエリをオンにする必要があります。 –

答えて

1

問題はあなたに関連していますJavaコード。 @ DanCiborowski-MSFTのようにAzure DocumentDB Java SDKがREST API Query Documentsの参照に従ってDocumentDB REST APIをラップしたため、ヘッダーx-ms-documentdb-query-enablecrosspartitionはあなたの問題理由を以下のように説明します。

ヘッダーX-MS-documentdb-クエリenablecrosspartition
必要/タイプ:オプション/ブール
説明:コレクションがパーティション化されている場合、これを設定する必要があります複数のパーティション間で実行できるようにするにはTrueに設定します。単一パーティション・キーまたは単一パーティション・コレクションに対してフィルタリングする問合せでは、ヘッダーを設定する必要はありません。

だからあなたは以下のように、方法queryDocumentsにクラスFeedOptionのインスタンスを渡す経由して、where句でのPartitionKeyことなく、複数のパーティションにまたがって照会するためのクロスパーティションを有効にするTrueを設定する必要があります。

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); 
+0

この問題は、Azureポータルを使用しても同じ動作であるため、Javaコードとは関係ありません。とにかく私は既にenableCrossPartitionQueryフラグを使用しましたが、動作しません。 Azure Portalを使用すると、このフラグは必要ありません。これは、partitionKeyを使用せずにクエリを実行しますが、idとは異なるフィールドを使用するとクエリが機能するためです。たとえば、 'SELECT * FROM c WHERE c.anotherFieldThatIsntPartitionOrId = 'BLAHBLAHBLAH''が動作します。 –

+0

@FedericoPaparoni Fiddlerを使用して、何が起こったかを調べるAPI呼び出しをキャッチしてみてください。 –

+0

Fiddlerのようなものを使用すると、私がブロッキング呼び出しを行うと、サーバーがJSONオブジェクトを返すことがわかります。このようなJSONオブジェクトは次のようになります: "vFwmAPVJtgA ="、 "Documents":[{"id": "1697-1" "_self": "dbs \/vFwmAA == \/colls \/vFwmAPVJtgA = \/docs \/vFwmAPVJtgADAAAAAAAAA == \ /"、 "_ rid": "vFwmAPVJtgADAAAAAAAAAA =="、 "_ ts":1496737515、 "_ partitionKeyValue" 91}]、 "_ count":1} 'しかし、ブラウザはとにかくAzure Portalから何も表示しません –

関連する問題