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 не упоминается используемый алгоритм, существует множество таких алгоритмов, которые он может использовать, но вы ставите на его эффективность, иначе это не будет поддерживаемый тип.