6

より大きいと少なく、そして私のクエリでエラーは次のようになります。それはしかし動作しませんGQLクエリ、Google Datastoreに関する問題。複数の条件と私はデータストアを照会しようとしていますオペレータ

SELECT * 
FROM mydb 
WHERE Latitude = "18.1" AND Number > "1" 

SELECT * 
FROM mydb 
WHERE Number > "1" AND Number < "5" 

私だけアクセスしていますがこの作品のような

no matching index found. recommended index is:\n- kind: mydb\n properties:\n - name: Location\n - name: Number\n

シンプルなリクエスト:私は自分のコードを実行したときに

GQL query error: Your Datastore does not have the composite index (developer-supplied) required for this query.

そして、このエラー:私は、データストアクエリボックスにこのエラーが出ますここに1本の列があるのはなぜだろう?

SELECT * 
FROM mydb 
WHERE Latitude = "18.1" AND Number = "1" 

これは働いていた:

いや、

は、その後、私はこのような要求を試してみました。

私は解決策を見上げてみました、と私は、このページに出くわした:https://cloud.google.com/datastore/docs/tools/indexconfig#Datastore_About_index_yaml

そのページを経由した後、私はどこかindex.yamlファイルが必要であることを集めました。 WEB-INFというフォルダに入っているはずです。しかし、私はこのフォルダを持っていません。

これは私のコードの小さなスニペットです:

Query<Entity> query = Query 
       .gqlQueryBuilder(Query.ResultType.ENTITY, 
         "SELECT * FROM " + kind + " WHERE Location = @location AND Number <= @number") 
       .setBinding("number", "5").setBinding("location", "18.1").build(); 
QueryResults<Entity> results = datastore.run(query); 
+0

あなたの 'appengine-web.xml'はどこにありますか? – Nicholas

+0

@Nicholas私はどこにも持っていないので、私のプログラムはそれなしで展開して実行できます。 –

+0

アプリケーションの完全なディレクトリ構造を投稿できますか? – Nicholas

答えて

2

あなたがしようとしているクエリは、デフォルトでは使用できませんComposite indexesを必要とするため、あなたが得るエラーです。それらはindex.yamlの範囲内で指定する必要があります。

Creating index filesという記事は、特に柔軟な環境で動作するJavaアプリケーションの場合とは少し異なります。

index.yamlを作成するには2通りの方法があります。

  1. 手動Index definitionsに規定する規則および構造以下のお好みのテキストエディタを使用しては。
  2. ローカルでテストするときにファイルを生成します。これはgcloud beta emulators datastore startコマンドを使用して行うことができます。 --data-dir <dir>オプションを使用して、生成されたindex.yamlの書かれている場所を指定することもできます。

その後、あなたはindex.yaml持っているとapp.yamlと同じディレクトリたら、あなたはそのディレクトリからgcloud preview app deploy index.yamlでそれを展開することができます。このプロセスは、Deploying the index fileに簡潔に記載されています。

Organizing yaml Configuration Filesもお勧めします。

+0

ありがとう、私は先に進みますが、app.yamlファイルを含む2つの場所がありますが、1つはsrc/main/appengineにあり、もう1つはtarget/appengine-stagingにあります。 index.yamlをどのディレクトリに置くべきですか? –

+0

'src/main/appengine'' 'gcloud preview app deploy'を実行している場所を想定しています。 – Nicholas

+0

ありがとうございます。 –

関連する問題