Отличия Autocomplete от SearchBox

В экосистеме Google Maps JavaScript API на базе Google Maps Platform существуют два близких по назначению механизма работы с пользовательским вводом: Autocomplete и SearchBox. Оба инструмента предназначены для преобразования текстового запроса в географические объекты, однако различаются по уровню абстракции, модели данных, управлению запросами и степени контроля над результатом.


Базовая концепция Autocomplete

Autocomplete представляет собой механизм предсказания мест (place predictions) на основе частично введённого текста. Его ключевая цель — по мере ввода пользователя формировать список структурированных предложений, связанных с конкретными объектами Places API.

Autocomplete существует в двух формах:

  • Autocomplete (виджет, привязанный к input)
  • AutocompleteService (низкоуровневый сервис без UI)

Основная модель работы

Autocomplete не выполняет полноценный поиск по карте. Вместо этого он:

  1. Анализирует ввод пользователя
  2. Возвращает список предсказаний (place predictions)
  3. Позволяет уточнить выбор до конкретного place_id
  4. Требует дополнительного запроса getPlaceDetails для получения полной информации

Характер ответа

Результаты Autocomplete содержат:

  • description — человекочитаемое название
  • place_id — уникальный идентификатор объекта
  • structured_formatting — разбивка строки
  • types — тип объекта (geocode, establishment, address и др.)

SearchBox представляет собой более высокоуровневый компонент, ориентированный на выполнение текстового поиска по Places API с возвратом результатов, приближенных к классическому поиску.

SearchBox:

  • Работает как расширение текстового поиска
  • Возвращает более «поисковые» результаты, а не только предсказания
  • Использует тот же input-элемент, но другой алгоритм ранжирования

Основная модель работы

SearchBox:

  1. Принимает текстовый запрос
  2. Выполняет поиск по индексу мест
  3. Возвращает список PlacesResult
  4. Сразу предоставляет базовые данные о месте без обязательного отдельного запроса деталей

Ключевое различие в архитектуре данных

Autocomplete: предсказание → детализация

Autocomplete строится вокруг двухступенчатой модели:

  • Шаг 1: Autocomplete → place predictions
  • Шаг 2: Place Details → полная информация

Это позволяет:

  • снизить нагрузку на API
  • оптимизировать сетевые запросы
  • управлять детализацией выборочно

SearchBox: поиск → результат

SearchBox использует одноступенчатую модель:

  • Запрос → сразу список мест

Результаты уже содержат базовую информацию, что уменьшает необходимость дополнительного запроса, но снижает гибкость.


Сравнение формата результатов

Autocomplete

{
  description: "Berlin, Germany",
  place_id: "ChIJAVkDPzdOqEcRcDteW0YgIQQ",
  types: ["locality", "political"]
}

Дальнейший шаг обязателен:

placesService.getDetails({ placeId })

{
  name: "Berlin",
  geometry: {
    location: { lat: 52.52, lng: 13.405 }
  },
  place_id: "ChIJAVkDPzdOqEcRcDteW0YgIQQ",
  formatted_address: "Berlin, Germany"
}

Детализация часто уже включена.


Различия в UX-модели

Autocomplete

  • Предсказания обновляются по мере ввода
  • Сильная зависимость от токенов сессии (AutocompleteSessionToken)
  • Высокая точность в адресах и объектах
  • Оптимизирован для выбора конкретного места

Особенность: пользовательская сессия объединяет серию запросов в одну биллинговую единицу, снижая стоимость и повышая релевантность.


SearchBox

  • Фокус на поиске по запросу, а не предсказании
  • Менее строгая структура результатов
  • Подходит для «поиска всего подряд»
  • Не требует столь жёсткой сессии запросов

Управление контекстом запроса

Autocomplete: строгая контекстуализация

Autocomplete позволяет задавать:

  • bounds — ограничение географической области
  • locationBias — смещение результата
  • componentRestrictions — фильтрация по стране
  • types — ограничение типа объектов

Пример:

const autocomplete = new google.maps.places.Autocomplete(input, {
  types: ["geocode"],
  componentRestrictions: { country: "de" },
  bounds: germanyBounds
});

SearchBox: мягкая релевантность

SearchBox также поддерживает bounds, но:

  • менее строго интерпретирует ограничения
  • может возвращать более «широкие» результаты
  • ориентирован на семантический поиск

Различия в API-использовании

Autocomplete (виджет)

const autocomplete = new google.maps.places.Autocomplete(input);

autocomplete.addListener("place_changed", () => {
  const place = autocomplete.getPlace();
});

AutocompleteService

const service = new google.maps.places.AutocompleteService();

service.getPlacePredictions(
  { input: "Ber", types: ["(cities)"] },
  callback
);

SearchBox

const searchBox = new google.maps.places.SearchBox(input);

searchBox.addListener("places_changed", () => {
  const places = searchBox.getPlaces();
});

Различия в уровне детализации данных

Характеристика Autocomplete SearchBox
Тип результата Предсказания Полные места
place_id Да Да
Геометрия Нет (до details) Частично
Адрес Нет Да
Тип фильтрации Жёсткая Мягкая
Доп. запрос Обязателен Часто не нужен

Производительность и стоимость

Autocomplete

  • Минимизирует передачу данных
  • Использует сессионные токены
  • Требует дополнительного запроса Place Details
  • Более экономичен при сложных сценариях

SearchBox

  • Возвращает более тяжёлые ответы
  • Может снижать количество запросов к Place Details
  • Потенциально дороже на единичный запрос при больших выборках

Семантическая модель поиска

Autocomplete ориентирован на:

  • точные адреса
  • географические сущности
  • структурированные места

SearchBox ориентирован на:

  • свободный текст
  • смешанные запросы (места + категории)
  • поиск по смыслу

Типичные сценарии применения

Autocomplete

  • ввод адреса доставки
  • выбор точки на карте
  • регистрация места
  • формы с обязательным place_id

SearchBox

  • поисковые интерфейсы карт
  • приложения с «поиском всего»
  • исследовательские сценарии
  • пользовательский ввод без строгой структуры

Различия в обработке событий

Autocomplete

Событие:

  • place_changed

Результат:

  • один объект place (через getPlace())

SearchBox

Событие:

  • places_changed

Результат:

  • массив объектов places

Глубинные отличия в модели Places API

Autocomplete фактически является интерфейсом к:

  • Place Predictions API

SearchBox работает ближе к:

  • Places Text Search API

Разница заключается в уровне абстракции:

  • Autocomplete — предиктивный слой
  • SearchBox — поисковый слой

Поведение при неоднозначных запросах

Autocomplete

  • предпочитает наиболее вероятные геокоды
  • активно использует пользовательский ввод как сигнал
  • быстро сужает результаты

SearchBox

  • сохраняет несколько интерпретаций запроса
  • может возвращать разные типы мест одновременно
  • менее агрессивен в фильтрации

Влияние на проектирование интерфейсов

Autocomplete приводит к проектированию интерфейсов с:

  • пошаговым уточнением
  • строгой структурой выбора
  • зависимостью от place_id

SearchBox приводит к интерфейсам:

  • поискового типа
  • с результатами списком
  • с возможностью массового выбора

Итоговая концептуальная граница

Autocomplete и SearchBox не являются взаимозаменяемыми компонентами. Различие заключается не только в UI, но и в архитектуре обработки данных:

  • Autocomplete строит путь «ввод → предсказание → уточнение → details»
  • SearchBox строит путь «ввод → поиск → результат»

Эта разница определяет поведение всей системы взаимодействия с географическими данными в Google Maps Platform, включая стоимость запросов, точность данных и стратегию интеграции в приложения.