2015-11-28 273 views
1

The App Engine Search API有一個GeoPoint字段。有沒有可能用它來進行半徑搜索?在給定GeoPoint的情況下,查找屬於某個半徑範圍內的所有文檔。App引擎搜索api GeoPoint搜索

截至目前看起來GeoSpecial Query只是通過邀請,所以我正在尋求一個簡單的替代方案,我很容易理解。

另外,如果以某種方式來說這很重要,我使用物化和this answer太複雜,我不明白如何實現它。

+1

在Python中,它非常簡單 - 根據https://cloud.google.com/appengine/training/fts_adv/lesson1,您只需將查詢字符串(如「距離」)傳遞給index.search (store_location,geopoint(-33.857,151.215))<45000「'(當然適合使用你想要的特定的地點和半徑)。在Java/objectify中,我不知道任何簡單的方法,而不是你覺得太複雜的方法。 「地理空間查詢」(在Alpha和僅限邀請中,用於說明)用於數據存儲 - 與在單獨的文檔和索引上工作的搜索API完全分開。 –

+0

謝謝,我錯過了。我認爲它應該適用於我的情況。至少在我可以測試它的前一天,因爲我現在正在開發。但是,謝謝!我會告訴你它是否有效。 – learner

+0

我會要求谷歌訪問地理查詢功能 - 可能是通過發佈到應用引擎谷歌組。 – stickfigure

回答

0

對於半徑搜索,使用proximitySearch,而不是bestBboxSearchCells(使用參考網址):

GeocellManager.proximitySearch(Point center, int maxResults, double maxDistance //... 

使用可以在這個環節上看到的方法的詳細信息: https://github.com/theganyo/javageomodel/blob/ce43c507ff671eb6f0998f7c7d78fd0c3877dbe7/geocell/src/main/java/com/beoui/geocell/GeocellManager.java

而且示例代碼,它非常直接: https://github.com/theganyo/javageomodel/blob/master/geocell/src/test/java/com/beoui/utils/HowToUseGeocell.java

0

正如Alex Martelli指出的,查詢字符串"distance(store_location, geopoint(-33.857, 151.215)) < 45000"將有效地產生結果,您試圖用您正在尋找的位置替換geopoint(),並用您希望結果的距離替換45000

該查詢字符串是運行時不可知的,因此可用於Python和Java運行時的相同方式。

如果您已經採用了不同的方法,產品或解決方案,請隨時在此處發佈。