5

** アップデート **

このクエリの手動インデックスを作成する必要があることを指摘してくれた Alfred Fuller に感謝します。

残念ながら、.NET アプリケーションから JSON API を使用する方法は、公式にサポートされているようには見えません。実際、App Engine の外部のアプリからこれを行う方法が公式にはまったくないように見えます。Cloud Datastore API は App Engine の外部のデータストアへのアクセスを許可するように設計されているため、これは奇妙です。

私が見つけた最も近いハックは、RPC を使用してインデックス定義を http://appengine.google.com/api/datastore/index/add に POST することでした。おそらくFiddlerを使用してappcfg.cmdによって行われた呼び出しを検査するために、誰かがこれを正確に行う方法の生の仕様(つまり、URLパラメーター、本文の正確な外観など)を教えてもらえますか?

** 元の質問 **

docsによると、「クエリは、さまざまなプロパティの等式 (EQUAL) フィルターと、1 つのプロパティの 1 つ以上の不等式フィルターを組み合わせることができます」。

ただし、次のクエリは失敗します。

{
 "query": {
  "kinds": [
   {
    "name": "CodeProse.Pogo.Tests.TestPerson"
   }
  ],
  "filter": {
   "compositeFilter": {
    "operator": "and",
    "filters": [
     {
      "propertyFilter": {
       "operator": "equal",
       "property": {
        "name": "DepartmentCode"
       },
       "value": {
        "integerValue": "123"
       }
      }
     },
     {
      "propertyFilter": {
       "operator": "greaterThan",
       "property": {
        "name": "HourlyRate"
       },
       "value": {
        "doubleValue": 50
       }
      }
     },
     {
      "propertyFilter": {
       "operator": "lessThan",
       "property": {
        "name": "HourlyRate"
       },
       "value": {
        "doubleValue": 100
       }
      }
     }
    ]
   }
  }
 }
}

次の応答で:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "FAILED_PRECONDITION",
    "message": "no matching index found.",
    "locationType": "header",
    "location": "If-Match"
   }
  ],
  "code": 412,
  "message": "no matching index found."
 }
}
4

4 に答える 4

2

「一致するインデックスが見つかりません」というエラー。クエリを機能させるには、インデックスを追加する必要があることを示します。自動インデックス生成のドキュメントを参照してください。

この場合、DepartmentCode と HourlyRate のプロパティを持つインデックスが必要です (この順序で)。

于 2013-07-02T17:57:56.003 に答える
1

gcloud-node私はこれらの3つのリンクでそれを修正しました:

そして最も重要なリンク:

最後のリンクで説明したように、インデックスは、クエリの結果セットをインデックスに格納することで、複雑なクエリをより高速に実行できるようにするものです。取得すると、 orno matching index foundを含む複雑なクエリを実行しようとしたことを意味します。したがって、クエリを機能させるには、実行しようとしているクエリを表すインデックスを定義する構成ファイルを手動で作成して、Google データストア インデックスにインデックスを作成する必要があります。修正方法は次のとおりです。orderfilter

  1. Python conf ファイルのディレクティブ ( https://cloud.google.com/appengine/docs/python/config/indexconfig#Python_About_index_yaml )に従って、アプリ ディレクトリindex.yamlなどの名前の付いたフォルダーにファイルを作成するか、テストからインスピレーションを得ます。 https://github.com/GoogleCloudPlatform/gcloud-node/blob/master/system-test/data/index.yamlindexesgcloud-node
  2. このコマンドを使用して構成ファイルからインデックスを作成します: https://cloud.google.com/sdk/gcloud/reference/preview/datastore/create-indexesgcloud preview datastore create-indexes indexes/index.yaml を参照してください
  3. Cloud Datastore/Indexes のデベロッパー コンソールにインデックスが提供されるまで待ちます。インデックスが構築されると、インターフェースに「serving」と表示されます。
  4. クエリが機能すると、クエリが機能するはずです

たとえば、次のクエリの場合:

 var q = ds.createQuery('project')
  .filter('tags =', category)
  .order('-date');

index.yaml次のようになります。

indexes:

- kind: project
  ancestor: no
  properties:
  - name: tags
  - name: date
    direction: desc
于 2015-08-10T20:44:44.637 に答える