API-интерфейс поиска Geosearch, расстояние фильтрации GAE (геопоинт (MY_GEOPOINT), store_location) <DISTANCE-запросы

Я сомневаюсь в том, как API поиска выполняет запросы, особенно в том, как он сканирует документы в индексе. Я сомневаюсь в следующем:

У меня есть индекс с большим количеством документов с GeoPoints на нем. Я хочу перечислить точки, которые находятся в определенном радиусе. Например, если у меня есть 20 миллионов документов в индексе и я выполняю такой поиск:

String query = distance(geopoint(MY_GEOPOINT), store_location) < 10000

В нем будут перечислены магазины, которые находятся в радиусе 10 км.

У меня следующий вопрос: как Search API собирается это сделать? Будет ли он сканировать 20 миллионов документов (и это займет много времени) или он каким-то образом оптимизируется?

Я спрашиваю из-за производительности, я разрабатываю приложение, которое будет использовать GeoSearch, и я боюсь, что оно будет расти медленно по мере роста базы данных.

Спасибо за любую помощь. С наилучшими пожеланиями JLuiZ20

1 ответ

Это, конечно, не будет сканировать все записи. вы можете сделать это из документации в https://cloud.google.com/appengine/training/fts_adv/

Поскольку геопункт является поддерживаемым типом данных и имеет встроенную функцию расстояния и поддерживает геопространственные запросы, он может эффективно индексировать геопоинты таким образом, чтобы он мог запрашивать радиус от точки. В appengine docs не упоминается используемый алгоритм, существует множество таких алгоритмов, которые он может использовать, но вы ставите на его эффективность, иначе это не будет поддерживаемый тип.

Другие вопросы по тегам