Ранжирование и релевантность

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

В экосистеме HERE Maps API механизмы релевантности используются практически во всех сервисах поиска:

  • Geocoding API;
  • Reverse Geocoding API;
  • Discover API;
  • Browse API;
  • Autosuggest API;
  • Lookup API;
  • Search API.

Корректное ранжирование результатов позволяет:

  • повышать точность поиска;
  • сокращать количество лишних результатов;
  • ускорять выбор нужного объекта;
  • улучшать пользовательский опыт;
  • адаптировать выдачу под географический контекст.

Архитектура поиска в HERE

Поисковые сервисы HERE работают по многоступенчатой схеме обработки запроса.

Основные этапы:

  1. Анализ пользовательского ввода.
  2. Нормализация текста.
  3. Определение типа запроса.
  4. Поиск кандидатов в базе данных.
  5. Вычисление релевантности.
  6. Сортировка результатов.
  7. Возврат наиболее подходящих объектов.

Например, запрос:

Starbucks

может вернуть сотни тысяч объектов по всему миру. Система должна определить:

  • местоположение пользователя;
  • популярность объектов;
  • близость к пользователю;
  • соответствие названию.

После этого результаты будут отсортированы по степени полезности.


Показатель Relevance

В поисковых ответах HERE присутствует параметр релевантности.

Типичный результат:

{
  "title": "Starbucks",
  "id": "here:pds:place:123456",
  "resultType": "place",
  "distance": 350,
  "position": {
    "lat": 40.7128,
    "lng": -74.0060
  }
}

Хотя внутренние алгоритмы HERE не раскрываются полностью, система учитывает множество факторов:

  • текстовое совпадение;
  • географическую близость;
  • популярность объекта;
  • полноту совпадения;
  • исторические данные поиска;
  • контекст запроса.

Текстовая релевантность

Первый уровень ранжирования основан на анализе текста.

Рассмотрим запрос:

McDonald

Возможные результаты:

McDonald's
McDonald Avenue
McDonald Library

Наиболее вероятно, что пользователь ищет ресторан сети McDonald’s, поэтому такие объекты получают больший вес.

Полное совпадение

Полное совпадение обычно получает максимальный рейтинг.

Запрос:

Berlin

Результат:

Berlin

будет ранжирован выше, чем:

Berlin Street
New Berlin
Berlin Park

Частичное совпадение

Поисковый механизм способен находить результаты даже при неполном вводе.

Пример:

Starb

Результаты:

Starbucks
Starbucks Coffee
Starbucks Reserve

Такая логика активно используется в Autosuggest API.


Нечеткое совпадение

Система поддерживает поиск с опечатками.

Запрос:

Amsterdm

может вернуть:

Amsterdam

Несмотря на ошибку в написании, алгоритмы определяют наиболее вероятный вариант.


Географическая релевантность

Местоположение пользователя является одним из важнейших факторов ранжирования.

Для определения контекста используются:

  • координаты пользователя;
  • географический прямоугольник поиска;
  • круг поиска;
  • регион;
  • страна.

Пример:

const url =
  'https://discover.search.hereapi.com/v1/discover' +
  '?q=pizza' +
  '&at=52.5200,13.4050' +
  '&apiKey=YOUR_API_KEY';

Запрос выполняется относительно центра Берлина.

Результаты поблизости будут иметь более высокий рейтинг.


Использование параметра at

Параметр at задает центральную точку поиска.

const at = '48.8566,2.3522';

Запрос:

fetch(
  `https://discover.search.hereapi.com/v1/discover?q=cafe&at=${at}&apiKey=${apiKey}`
)

Система будет считать Париж наиболее значимой областью поиска.

Без параметра at результаты могут оказаться менее релевантными.


Ограничение области поиска

Для повышения качества выдачи полезно ограничивать пространство поиска.

Поиск внутри прямоугольника

const bbox =
  '13.082,52.338,13.761,52.675';

Запрос:

fetch(
  `https://discover.search.hereapi.com/v1/discover?q=hotel&in=bbox:${bbox}&apiKey=${apiKey}`
)

В этом случае результаты за пределами области исключаются.


Поиск по радиусу

const circle =
  'circle:52.5200,13.4050;r=5000';

Запрос:

fetch(
  `https://discover.search.hereapi.com/v1/discover?q=gas station&in=${circle}&apiKey=${apiKey}`
)

Результаты будут отбираться внутри радиуса 5 километров.

Это значительно повышает релевантность локального поиска.


Ранжирование по расстоянию

Для большинства категорий объектов расстояние играет критическую роль.

Запрос:

fetch(
  `https://discover.search.hereapi.com/v1/discover?q=pharmacy&at=52.52,13.40&apiKey=${apiKey}`
)

Возможный ответ:

[
  {
    "title": "Pharmacy A",
    "distance": 120
  },
  {
    "title": "Pharmacy B",
    "distance": 450
  },
  {
    "title": "Pharmacy C",
    "distance": 1200
  }
]

Чем ближе объект к указанной точке, тем выше вероятность его появления в начале списка.


Ранжирование по популярности

Популярные объекты часто получают дополнительный вес.

Например:

Eiffel Tower

При поиске в Париже этот объект обычно оказывается выше менее известных достопримечательностей.

На ранжирование могут влиять:

  • посещаемость;
  • известность бренда;
  • наличие дополнительных данных;
  • количество пользовательских обращений.

Категориальная релевантность

Поиск может учитывать принадлежность объекта к определенной категории.

Запрос:

restaurant

вернет объекты категории ресторанов.

Пример использования категории:

fetch(
  `https://discover.search.hereapi.com/v1/discover?q=restaurant&at=40.7128,-74.0060&apiKey=${apiKey}`
)

Система не станет ранжировать выше объекты, относящиеся к гостиницам или магазинам.


Автодополнение и релевантность

Autosuggest API использует собственный механизм ранжирования.

Пример запроса:

fetch(
  `https://autosuggest.search.hereapi.com/v1/autosuggest?q=berl&at=52.52,13.40&apiKey=${apiKey}`
)

Ответ может содержать:

[
  {
    "title": "Berlin"
  },
  {
    "title": "Berlin Central Station"
  },
  {
    "title": "Berlin Brandenburg Airport"
  }
]

Алгоритм оценивает:

  • популярность;
  • полноту совпадения;
  • частоту использования;
  • географическую близость.

Влияние языка на релевантность

HERE поддерживает локализацию поисковых запросов.

Пример:

fetch(
  `https://discover.search.hereapi.com/v1/discover?q=hotel&lang=de-DE&at=52.52,13.40&apiKey=${apiKey}`
)

Параметр:

lang=de-DE

позволяет получать более релевантные результаты для немецкоязычных пользователей.

Поддерживаются десятки языков и региональных настроек.


Геокодирование и релевантность

При преобразовании адреса в координаты также используется система ранжирования.

Запрос:

fetch(
  `https://geocode.search.hereapi.com/v1/geocode?q=Main Street 10&apiKey=${apiKey}`
)

Возможны несколько совпадений.

Система оценивает:

  • точность адреса;
  • полноту данных;
  • региональные ограничения;
  • близость к указанному контексту.

Улучшение релевантности через фильтрацию

Фильтры позволяют исключать нерелевантные результаты еще до этапа отображения.

Пример:

fetch(
  `https://discover.search.hereapi.com/v1/discover?q=hotel&in=countryCode:DEU&apiKey=${apiKey}`
)

Поиск будет ограничен Германией.

Дополнительные преимущества:

  • уменьшение объема выдачи;
  • ускорение обработки;
  • повышение точности результатов.

Пользовательская сортировка результатов

После получения ответа возможно дополнительное ранжирование на стороне клиента.

Пример сортировки по расстоянию:

results.sort((a, b) => a.distance - b.distance);

Сортировка по названию:

results.sort((a, b) =>
  a.title.localeCompare(b.title)
);

Сортировка по нескольким критериям:

results.sort((a, b) => {
  if (a.distance !== b.distance) {
    return a.distance - b.distance;
  }

  return a.title.localeCompare(b.title);
});

Построение собственной модели релевантности

В крупных приложениях часто используется комбинированная оценка.

Пример вычисления рейтинга:

function calculateScore(item) {
  let score = 0;

  score += item.popularity * 0.5;

  score += (10000 - item.distance) * 0.3;

  score += item.textMatch * 0.2;

  return score;
}

Затем выполняется сортировка:

results.sort(
  (a, b) =>
    calculateScore(b) -
    calculateScore(a)
);

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


Работа с несколькими типами результатов

Ответы Search API могут содержать различные типы сущностей:

place
street
houseNumber
locality
administrativeArea
pointOfInterest

Каждый тип может иметь собственный приоритет.

Пример:

const priority = {
  pointOfInterest: 5,
  place: 4,
  locality: 3,
  street: 2,
  houseNumber: 1
};

Сортировка:

results.sort(
  (a, b) =>
    priority[b.resultType] -
    priority[a.resultType]
);

Анализ поисковых запросов

Для повышения релевантности полезно классифицировать запросы до отправки в HERE.

Примеры:

Запрос Тип
Berlin Город
Hotel Berlin Категория + город
Brandenburg Gate Достопримечательность
Alexanderplatz 1 Адрес
Coffee near me Поиск рядом

На основании типа запроса можно выбирать подходящий сервис:

  • Geocoding API;
  • Discover API;
  • Browse API;
  • Autosuggest API.

Это позволяет получать более точные результаты.


Метрики качества ранжирования

При разработке поисковых систем обычно отслеживаются следующие показатели:

Precision

Доля релевантных результатов среди найденных.

Precision =
релевантные результаты /
все результаты

Recall

Доля найденных релевантных результатов среди всех существующих.

Recall =
найденные релевантные /
все релевантные

Mean Reciprocal Rank (MRR)

Показывает, насколько высоко располагается правильный результат.

MRR = 1 / позиция результата

Чем выше показатель, тем эффективнее работает система ранжирования.


Практические рекомендации

Всегда передавать координаты пользователя

&at=latitude,longitude

Это один из наиболее эффективных способов улучшения релевантности.

Ограничивать область поиска

Использование:

bbox
circle
countryCode

существенно уменьшает количество нерелевантных объектов.

Использовать Autosuggest

Автодополнение помогает пользователю формировать более точные запросы еще до выполнения основного поиска.

Выполнять дополнительную клиентскую сортировку

Особенно полезно для приложений доставки, логистики, туризма и навигации.

Анализировать пользовательское поведение

История выбора результатов позволяет строить собственные алгоритмы релевантности поверх возможностей HERE Search API.

Комбинировать несколько факторов

Наиболее качественное ранжирование достигается при одновременном учете:

  • текстового совпадения;
  • расстояния;
  • популярности;
  • категории объекта;
  • региона поиска;
  • пользовательских предпочтений;
  • бизнес-приоритетов приложения.

В результате поисковая подсистема на базе HERE Maps API способна предоставлять высокоточную выдачу, адаптированную к контексту пользователя, географическому положению и особенностям конкретной предметной области.