2010-06-11 9 views
13

Tôi biết rằng động cơ ứng dụng này có những hạn chế của "Bộ lọc bất bình đẳng được phép trên một tài sản Chỉ" như mô tả ở đây: http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html#Introducing_Indexeslàm thế nào để hoạt động hiệu quả hai bộ lọc bất bình đẳng trên các truy vấn trong công cụ ứng dụng

Tuy nhiên có một số cách về cơ bản chạy hai bộ lọc, hoặc điều này đơn giản là không thể? Ví dụ, nếu tôi có một loại thực thể đơn giản có toạ độ X và Y, và tôi muốn tất cả các thực thể nằm trong một phạm vi nhất định từ X1 đến X2 và Y1 đến Y2, có cách nào đó để truy vấn tất cả các thực thể từ X1 đến X2 được sắp xếp theo giá trị Y của chúng và sau đó dễ dàng lấy các giá trị có liên quan giữa phạm vi mong muốn của tôi cho các giá trị Y?

Nếu có, ai đó có một số mã ví dụ để chứng minh?

Trả lời

6

Nếu nó phù hợp với dữ liệu của bạn, bạn có thể giải phóng X và Y của bạn thành các thùng, tạo giá trị băm của hai giá trị và lưu trữ trên mô hình. Sau đó, bạn có thể thực hiện tra cứu chính xác cho (các) băm chồng lên vùng bạn muốn tìm kiếm bên trong. Sau đó, lọc theo cách thủ công các kết quả nằm ngoài khu vực của bạn.

Đây thực chất là những gì geomodel đang làm cho vĩ độ/kinh độ.

+0

có mẫu làm việc cho mô hình này không? Giống như tôi cần để có được kết quả của tuổi> 26 và chiều cao> 113. Làm cách nào để tôi ánh xạ/truy vấn nó? – nanospeck

+0

Cũng như tuổi bạn có thể lưu trữ 'thập kỷ' cho mỗi người dùng, như 0, 10, 20, 30, 40, v.v. Sau đó thực hiện truy vấn có chiều cao> 113 và tuổi trong [20, 30, 40, (và vì vậy lên đến 100). Sau đó, một khi bạn nhận được kết quả, tự lọc ra những người dưới 26. –

3

Theo Alfred Fuller gần đây Google I/O talk, họ đang làm việc hỗ trợ cho nhiều bộ lọc bất bình đẳng về thuộc tính số.

+2

bất cứ ai biết nếu điều này đã xảy ra chưa? – clifgray

+1

Chỉ trong truy vấn đối tượng. Như thế này: SomeModel.all(). Filter ('a>', b) .filter ('a2>', b2) –

1

Tùy thuộc vào những gì bạn đang cố gắng làm, bạn có thể tìm thấy điều này MultiInequalityMixin thú vị. Nó thực hiện khá nhiều những gì bạn mô tả, vượt qua bất bình đẳng đầu tiên thông qua cơ sở dữ liệu của Google và làm bất bình đẳng tiếp theo như các bộ lọc. Disclaimer: đó là một thực hiện khá sơ sài của một ý tưởng tôi đã có hơn một năm trước đây và đã không thực sự tất cả ... HOÀN THÀNH Druce nói, một số loại geohash vv thuật toán là những gì được gọi là cho.