6

tôi đang cố gắng để truy vấn Datastore, và truy vấn của tôi trông như thế này:Sự cố với truy vấn GQL, Google Datastore. Lỗi với nhiều điều kiện và lớn hơn và ít hơn các nhà khai thác

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

Nó không làm việc mặc dù. Tôi nhận được lỗi này trong hộp truy vấn Datastore:

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

Và lỗi này khi tôi chạy mã của tôi:

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

yêu cầu đơn giản như công việc này:

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

Tôi chỉ truy cập một cột duy nhất ở đây có lẽ đó là lý do tại sao?

Nope,

Sau đó, tôi đã cố gắng một yêu cầu như thế này:

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

này làm việc.

tôi đã cố gắng để tìm kiếm một giải pháp, và tôi đã xem qua trang này: https://cloud.google.com/datastore/docs/tools/indexconfig#Datastore_About_index_yaml

Sau khi đi qua trang đó, tôi thu thập được rằng tôi cần một tập tin index.yaml nơi nào đó. Nó có nghĩa vụ phải đi trong một thư mục gọi là WEB-INF. Nhưng tôi không có thư mục này.

Đây là một đoạn nhỏ của mã của tôi:

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' của bạn nằm ở đâu? – Nicholas

+0

@Nicholas Tôi không có ở đâu cả, chương trình của tôi có thể triển khai và chạy mà không có nó. –

+0

Bạn có thể đăng cấu trúc thư mục đầy đủ của ứng dụng của mình không? – Nicholas

Trả lời

2

Các lỗi mà bạn nhận được là vì truy vấn mà bạn đang cố gắng đòi hỏi Composite indexes mà không có sẵn theo mặc định. Chúng phải được chỉ định trong phạm vi index.yaml.

Bài viết Creating index files hơi khác so với bài viết được dành riêng cho các ứng dụng Java chạy trong môi trường linh hoạt.

Có 2 cách để tạo ra một index.yaml:

  1. thủ sử dụng soạn thảo của bạn yêu thích văn bản theo các quy tắc và cơ cấu theo quy định tại Index definitions.
  2. Tạo tệp khi bạn kiểm tra cục bộ. Điều này có thể được thực hiện bằng cách sử dụng lệnh gcloud beta emulators datastore start. Bạn cũng có thể sử dụng tùy chọn --data-dir <dir> để chỉ định nơi tạo index.yaml được tạo.

Sau đó, khi bạn có index.yaml và cùng thư mục với app.yaml, bạn có thể triển khai nó với gcloud preview app deploy index.yaml từ thư mục đó. Quá trình này được ghi chép ngắn gọn trong Deploying the index file.

Tôi cũng khuyên bạn nên đọc Organizing yaml Configuration Files.

+0

Cảm ơn bạn, tôi sẽ tiếp tục và thử điều này, tuy nhiên có hai nơi chứa tệp app.yaml, một tệp nằm trong src/main/appengine và một tệp khác nằm trong target/appengine-staging. Tôi nên đặt index.yaml vào thư mục nào? –

+0

'src/main/appengine' như tôi giả định nơi bạn đang chạy' ứng dụng xem trước gcloud triển khai' – Nicholas

+0

Cảm ơn bạn, tôi sẽ cung cấp cho nó một shot và cho bạn biết làm thế nào nó đi. –

Các vấn đề liên quan