2017-07-27 8 views
0

Google Datastoreを初めてご使用になり、このGoogleのドキュメントに従いました。Googleデータストアに投影クエリを適用できません。エラー:一致するインデックスが見つかりません

https://cloud.google.com/datastore/docs/datastore-api-tutorial

私は、このドキュメントを読むことで、GoogleのAPIを呼び出すための許可を行っています。

https://developers.google.com/identity/protocols/application-default-credentials#callingpython

私は2つだけのファイルがあります。

1. client_secret.json 
2. datastoreConnection.py 

を、これは今まで私のdatastoreConnection.pyです:

import os 
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '/path/to/client_secret.json' 

from oauth2client.client import GoogleCredentials 
credentials = GoogleCredentials.get_application_default() 
from google.cloud import datastore 

client = datastore.Client(project ="xyz",namespace = "staging") 

def list_tasks(client): 
    query = client.query(kind='testData') 
    query.projection = ['patientName'] 
    return list(query.fetch(limit=10)) 

print(list_tasks(client)) 

このコードは正常に動作し、私に必要なデータを返しています。私は複数のプロパティとプロジェクションを適用すると

問題が生じています。私はこれを読ん投影クエリを作るための

google.cloud.exceptions.PreconditionFailed: 412 no matching index found. recommended index is:<br/>- kind: testData<br/> properties:<br/> - name: age<br/> - name: patientName<br/> 

: 例えば

query.projection = ['patientName','age'] 

コードは私にエラーを与えています。 https://cloud.google.com/datastore/docs/concepts/queries#datastore-projection-query-python

私はプロパティ名をチェックしても、同じエラーが発生しています。 どうすればこの問題を解決できますか?

私はこの種の問題に関連する他の質問にindex.yamlファイルを見てきました。これは使用する必要があり、その利点は何ですか?

答えて

1

複数のプロパティを取得する必要がありますが、すべてのプロパティ(*)を取得する必要がない場合は、一致する複合インデックスが必要です。この場合、患者名と年齢のプロパティに複合インデックスが必要です。 index.yamlファイルまたはgcloudコマンドラインツールを使用して複合インデックスを作成できます。以下のドキュメントはあなたに役立ちます:

https://cloud.google.com/datastore/docs/concepts/indexes

関連する問題