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.

그리고이 오류 : 나는 데이터 저장소 쿼리 상자에서이 오류가 아마 여기 한 열이 그 이유일까요? 이 일

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 파일을 포함하는 두 개의 장소가 있습니다. 하나는 src/main/appengine에 있고 다른 하나는 target/appengine-staging에 있습니다. index.yaml을 어느 디렉토리에 넣어야합니까? –

+0

'src/main/appengine' 어디서''gcloud preview app deploy'를 실행하는지 가정합니다. – Nicholas

+0

고맙습니다.이 기회를 놓치지 않고 알려줍니다. –