← На главную

Интеграция поиска с флагом fullData=true

Метод интеграции, при котором Search API возвращает полные данные товаров — название, цену, изображение, ссылку — без необходимости обращаться к собственной базе данных.

📖
Обзор метода

При fullData=true Search API возвращает полные данные каждого товара прямо в ответе — идентификатор, название, цену, изображение, ссылку и дополнительные атрибуты. Обращаться к собственной базе данных не нужно.

Это упрощённый метод интеграции, подходящий для быстрого старта, прототипов и случаев, когда нет доступа к собственной БД товаров на бэкенде.

⚠️
Ограничение: максимальный размер выдачи — 400 товаров (против 2000 при fullData=false). Для production-нагрузки рекомендуется метод fullData=false.
🔀
Когда использовать
СценарийfullData=truefullData=false
Быстрый прототип / MVP✅ рекомендуется
Production-интеграция
Нет доступа к БД на бэкенде
Есть собственная БД товаров
Нужна скорость ответа
Лимит на размер выдачидо 400 товаровдо 2000 товаров
🏗️
Архитектура запроса

В отличие от fullData=false, здесь нет шага обогащения данными из БД — Search API возвращает всё необходимое в одном ответе. Блок Autocomplete API участвует только если на проекте интегрированы автоподсказки.

🖥 Браузер пользователя пользователь вводит запрос ввод: «кросовки» 🔍 Autocomplete API autocomplete.diginetica.net → возвращает correction correction = «кроссовки» ⚙️ Ваш бэкенд (прокси / SSR) передаёт correction как st= в Search API st=correction Search API sort.diginetica.net/search fullData=true полные данные name, price, image уже в ответе ✅ Шаг обращения к БД не нужен данные уже есть в ответе Search API ✅ Готовый ответ отображается пользователю ЛЕГЕНДА основной поток ответ с данными
ℹ️
Запрос к Search API не должен идти напрямую с фронтенда. Используйте серверный прокси, чтобы не раскрывать apiKey в браузере.
⚠️
Параметр st — это correction из Autocomplete API, а не сырой ввод пользователя. Передача неисправленного запроса ухудшает качество ранжирования.
ℹ️
Блок Autocomplete API на схеме показан пунктиром — он участвует только если на проекте интегрированы автоподсказки. Подробнее — в разделе Коррекция из Autocomplete.
⚙️
Параметры запроса

Обязательные

ПараметрТипОписание
streq string Поисковый запрос пользователя. Если интегрирован Autocomplete — передавать значение поля correction из ответа Autocomplete API.
apiKeyreq string Ключ доступа. Предоставляется командой Diginetica.

Рекомендуемые

ПараметрТипПо умолчаниюОписание
fullDatabooleanfalseДля этого метода интеграции нужно явно передать true, чтобы API вернул полные данные товаров.
strategystringСтратегия ML-ранжирования. По умолчанию подтягивается из серверной конфигурации сайта. Предоставляется командой Diginetica.
sizeinteger400Количество товаров на страницу. Минимум 1, максимум 400 (при fullData=true). В примере ниже используется size=20 для краткости.
offsetinteger0Смещение для пагинации.
withFacetsbooleanfalseВключить фасеты в ответ.
withCorrectionbooleanfalseВернуть исправленный запрос.
showUnavailablebooleanfalseВключить недоступные товары.
regionIdstringglobalID региона / фида.
filterstringФильтр по атрибуту. Параметр повторяемый.
sortstringDEFAULTDEFAULT, PRICE_ASC, PRICE_DESC.

Дополнительные параметры (из Swagger, расширенный набор)

Параметры ниже описаны в Swagger, но используются реже. Большинство клиентов работает с основным набором выше; дополнительные параметры применяются в особых сценариях или тонкой настройке.

ПараметрТипПо умолчаниюОписание
useCompletionbooleanне задан в SwaggerДописывать часть запроса до предиктивно выбранного полного слова. Дефолтное значение в Swagger не зафиксировано — уточняйте у команды Diginetica.
treeFacetsbooleanfalseФормат иерархии фасетов категорий: true — дерево, false — плоский список.
unavailableMultipliernumber0.2Множитель скоринга для недоступных товаров (0–1).
withSkubooleanfalseГруппировать товары в мультикарточки по полю group_id из фида.
productIdstringID товара-якоря для контекстных стратегий ранжирования.
useCategoryPredictionbooleanВключить предсказание категории по запросу (буст товаров из предсказанной категории).
previewbooleanfalseРежим preview — возвращает дополнительную отладочную информацию о ранжировании.
exceptionIdsstringID товаров, которые нужно исключить из выдачи (через запятую).
showRatingbooleanfalseВключить в ответ поля rating и totalRatings товаров.
modelNamestringИмя ML-модели ранжирования. Обычно берётся из серверной конфигурации сайта.
🔗
Пример запроса
HTTP
GET https://sort.diginetica.net/search
  ?st=кроссовки
  &apiKey=YOUR_API_KEY
  &strategy=advanced_xname,zero_queries
  &fullData=true
  &size=20
  &offset=0
  &withFacets=true
  &withCorrection=true
  &showUnavailable=false
  &regionId=msk
ℹ️
Если на проекте интегрирован Autocomplete — значение st должно быть взято из поля correction ответа Autocomplete API. Подробнее — в разделе Коррекция из Autocomplete.
📦
Структура ответа
JSON
{
  "totalHits": 284,
  "zeroQueries": false,
  "correction": "кроссовки",
  "products": [
    {
      "id": "45678",
      "name": "Nike Air Max 90",
      "brand": "Nike",
      "price": "6490",
      "oldPrice": "8990",
      "image_url": "https://cdn.example.com/img/45678.jpg",
      "link_url": "https://example.com/product/45678",
      "available": true,
      "score": 0.987,
      "attributes": {
        "Бренд":  ["Nike"],
        "Цвет":   ["белый"],
        "Размер": ["42"]
      }
    }
  ],
  "facets": [...],
  "selectedFacets": [...]
}
🗂️
Поля товара
ПолеТипОписание
Поля товара (объекты массива products)
idstringOffer ID из фида.
groupIdstringID группы товаров (для мультикарточек при withSku=true).
idsarray<string>Внешние идентификаторы товара.
namestringНазвание товара.
brandstringБренд товара.
pricestringАктуальная цена (строка).
oldPricestringСтарая цена в виде строки (если есть скидка).
image_urlstringURL основного изображения.
image_urlsarray<string>Все изображения товара.
link_urlstringURL страницы товара.
availablebooleanДоступность товара.
scorenumberСкоринговое значение релевантности.
alternativebooleanПризнак альтернативного товара (для стратегии advanced_xname).
categoriesarrayКатегории товара. Поля: id, name, link_url, image_url, direct.
attributesobjectАтрибуты товара в формате { "название": ["значение", ...] }.
skuChoiceAttributesarray<string>Имена атрибутов, по которым возможен выбор SKU.
skusarraySKU товара (при withSku=true). Поля: id, available, name, price, oldPrice, link_url, image_url, image_urls[], attributes{}.
ratingnumberСредний рейтинг (если showRating=true).
totalRatingsintegerКоличество оценок (если showRating=true).
Корневые поля ответа
querystringОригинальный поисковый запрос пользователя.
totalHitsintegerОбщее количество найденных товаров.
zeroQueriesbooleanПризнак нулевого ранжирования.
correctionstringИсправленный запрос (при withCorrection=true).
redirectUrlstringURL редиректа (для desktop), если запрос совпал с правилом редиректа.
redirectMobileUrlstringURL редиректа для мобильных устройств.
productsarrayСписок товаров в ранжированном порядке. Структура элемента — см. таблицу «Поля товара» выше.
facetsarrayВсе доступные фасеты (при withFacets=true).
selectedFacetsarrayФасеты с применёнными фильтрами.
⚠️
Не сортировать повторно. Порядок товаров из API — это ML-ранжирование. Любая пересортировка на стороне клиента ломает его.
🔍
Нулевая выдача

Поле zeroQueries сигнализирует о нулевом ранжировании.

zeroQueriestotalHitsЧто показывать
false> 0Стандартная выдача
true> 0Похожие товары с плашкой «По запросу ничего не найдено, возможно вас заинтересует»
true= 0Страница нулевой выдачи: поисковые подсказки, популярные товары
🚫
Не показывать пустую страницу при zeroQueries: true и totalHits: 0. Пользователь должен видеть альтернативный контент.
✏️
Исправление запроса

При withCorrection=true ответ содержит поле correction.

Если correction отличается от исходного st — показать пользователю плашку:

💡
Показаны результаты по запросу «кроссовки».
Искать вместо этого «кросовк»?
ℹ️
При серверной интеграции значение correction передавать в трекинг-поле searchTerm. Исходный запрос пользователя — в originalSearchTerm.
🔄
Коррекция из Autocomplete API

Если на вашем проекте интегрированы автоподсказки, в результаты выдачи должен передаваться запрос пользователя после исправления и дописывания — эти операции выполняются в API Autocomplete.

⚠️
Используйте значение поля correction из ответа Autocomplete API и передавайте его в параметр st при запросе к API sort (Search API). Если передавать исходный ввод пользователя — ранжирование будет работать по неисправленному запросу.

Схема передачи correction

JS
// 1. Пользователь вводит запрос
const userInput = "кросовки"
// 2. Запрос к Autocomplete API (происходит при вводе)
const autocompleteResponse = await fetch(
  `https://autocomplete.diginetica.net/autocomplete?st=${userInput}&apiKey=YOUR_API_KEY`
)
const autocompleteData = await autocompleteResponse.json()
// 3. Берём исправленный запрос из поля correction
const correction = autocompleteData.correction ?? userInput
// correction = "кроссовки"
// 4. Передаём correction в параметр st API sort
const searchResponse = await fetch(
  `https://sort.diginetica.net/search?st=${encodeURIComponent(correction)}&fullData=true&apiKey=YOUR_API_KEY&strategy=...`
)

Что куда передавать

Источник значенияКуда передавать
correction из Autocomplete API Параметр st в API sort (Search API)
Исходный ввод пользователя Поле originalSearchTerm в трекинг-событии
correction из Autocomplete API Поле searchTerm в трекинг-событии
ℹ️
Если поле correction в ответе Autocomplete API отсутствует или пусто — используйте исходный запрос пользователя как есть.
🎛️
Фасеты и фильтры

Фасеты возвращаются при withFacets=true. Структура одного фасета:

JSON
{
  "name": "Бренд",
  "dataType": "DISTINCT",
  "values": [
    { "id": "Nike",   "name": "Nike",   "value": 34 },
    { "id": "Adidas", "name": "Adidas", "value": 28 }
  ]
}

Типы фасетов

dataTypeОтображение
DISTINCTЧекбоксы
NUM_DISTINCTЧекбоксы с числами
BOOLEANПереключатель
RANGESРадиокнопки с диапазонами
SLIDERСлайдер диапазона цен

Пример UI: sticky-фасеты

Фасеты рекомендуется закреплять при скролле — для этого контейнер демо ниже имеет фиксированную высоту и overflow-y: auto, а панель фасетов — position: sticky; top: 0. Прокрути список товаров вправа — фасеты остаются на месте.

Фильтры
Бренд
Nike34
Adidas28
Puma17
Reebok11
Цена, ₽
до 3 00012
3 000–8 00029
от 8 0008
Цвет
Белый21
Чёрный18
Серый9
Размер
4014
4222
4418
467
📌 position: sticky
👟
Nike Air Max 90
6 490 ₽ 8 990 ₽
Бренд: Nike · Цвет: белый · Размер: 42
👟
Nike React Infinity Run
7 990 ₽
Бренд: Nike · Цвет: чёрный · Размер: 42
👟
Nike Revolution 6
4 290 ₽
Бренд: Nike · Цвет: серый · Размер: 40
👟
Nike Downshifter 12
3 790 ₽
Бренд: Nike · Цвет: белый · Размер: 44
👟
Nike Pegasus 40
8 490 ₽
Бренд: Nike · Цвет: чёрный · Размер: 42
👟
Nike Air Force 1
7 290 ₽ 9 490 ₽
Бренд: Nike · Цвет: белый · Размер: 42
👟
Nike Zoom Fly 5
5 990 ₽
Бренд: Nike · Цвет: серый · Размер: 44

CSS для sticky-фасетов

CSS
.search-layout {
  display: flex;
  gap: 24px;
  align-items: flex-start;
  max-height: calc(100vh - 48px);
  overflow-y: auto;
}
.facets-panel {
  width: 220px;
  min-width: 220px;
  position: sticky;
  top: 0;
  align-self: flex-start;
}
.results-col {
  flex: 1;
  min-width: 0;
}
ℹ️
Ключевой момент: position: sticky на фасетах работает только если скролл происходит внутри родительского контейнера с overflow-y: auto, а не по всей странице. Родитель не должен иметь overflow: hidden.

Синтаксис фильтров

ЗадачаСинтаксис
Одно значениеfilter=brands:Nike
OR (одно из)filter=brands:Nike;Adidas
AND (оба)filter=brands:Nike&filter=brands:Adidas
Диапазон ценfilter=price:2000;15000
По категорииfilter=categories:12967
По атрибутуfilter=Цвет:синий
⚠️
Название атрибута чувствительно к регистру. filter=цвет:синий не сработает, если атрибут в фиде называется Цвет. Значение атрибута приводится к нижнему регистру автоматически.
ℹ️
Фасеты не нужно запрашивать отдельным запросом. Они возвращаются в том же ответе при withFacets=true.
⏱️
Таймаут и fallback

Таймаут для /search2000 мс.

🚫
При превышении таймаута не показывать пустую страницу. Возвращать результаты стандартного поиска платформы (fallback).
📡
Трекинг
SEARCH_EVENT · POST tracking-app.diginetica.net/event

После каждого поискового запроса отправить событие SEARCH_EVENT на tracking-app.diginetica.net/event.

Поля события SEARCH_EVENT

ℹ️
Базовые обязательные поля (apiKey, sessionId, userGUID, channel) передаются во всех событиях трекинга и здесь не дублируются. Ниже перечислены поля, специфичные для SEARCH_EVENT и рекомендуемые к передаче.
ПолеЗначение
eventType"SEARCH_EVENT"
searchTerm Если интегрирован Autocomplete — значение correction из Autocomplete API. Иначе — correction из ответа Search API, или st если коррекции не было.
originalSearchTermИсходный запрос пользователя (до любых исправлений)
pageProductsМассив id товаров текущей страницы
pageNumberНомер текущей страницы (целое число, integer)
isZeroQueryЗначение zeroQueries из ответа Search API. Передавать как строку ("true" или "false").
anyQueryWorkedСтрока "true" или "false". "true", если searchTerm !== originalSearchTerm.
⚠️
Если на проекте интегрирован Autocomplete: в поле searchTerm передавать значение correction из ответа Autocomplete API — именно тот запрос, который был передан в st API sort.

Когда отправлять

При загрузке страницы результатов · При смене страницы (пагинация) · При применении / сбросе фильтра · При смене сортировки
🚫
Не отправлять при каждом символе ввода (это задача AUTOCOMPLETE_CLICK) и при скролле без смены страницы.

Пример тела события

JSON
{
  "eventType": "SEARCH_EVENT",
  "sessionId": "[UUID]",
  "userGUID": "0:kzmrfk1k:[UUID]",
  "apiKey": "YOUR_API_KEY",
  "location": "https://example.com/search?q=кросовки",
  "referer": "https://example.com/",
  "regionId": "msk",
  "viewGUID": "[UUID]",
  "searchTerm": "кроссовки",
  "originalSearchTerm": "кросовки",
  "channel": "WEB",
  "pageProducts": ["45678", "45699", "45700"],
  "pageNumber": 1,
  "isZeroQuery": "false",
  "anyQueryWorked": "true"
}
🐛
Частые ошибки
Не передан параметр fullData=true
Без явной передачи fullData=true API вернёт только идентификаторы товаров без данных.
Неправильный порядок товаров
После получения ответа результат пересортирован по цене или популярности. ML-ранжирование потеряно.
Запрос идёт с фронтенда напрямую
apiKey раскрыт в браузере. Все запросы к API — только через бэкенд.
totalHits используется как длина массива products
totalHits — общее количество найденных товаров во всей выдаче. products — только текущая страница.
Не обрабатывается zeroQueries: true
Пользователь видит пустую страницу вместо альтернативной выдачи или блока «Возможно, вас заинтересует».
Фасеты запрашиваются отдельным запросом
Фасеты возвращаются в том же запросе при withFacets=true. Второй запрос не нужен.
Фильтр по атрибуту передаётся с неверным регистром
filter=цвет:синий не сработает, если атрибут в фиде называется Цвет. Название чувствительно к регистру.
В трекинге передаётся исходный запрос вместо исправленного
В поле searchTerm нужно передавать исправленный запрос. Если интегрирован Autocomplete — значение correction из Autocomplete API.
При наличии Autocomplete в st передаётся исходный ввод пользователя
Если интегрирован Autocomplete, в параметр st API sort нужно передавать значение поля correction из ответа Autocomplete API, а не сырой ввод пользователя.
Чеклист перед релизом
  • fullData=true явно передаётся в каждом запросе
  • apiKey не передаётся с фронтенда — используется серверный прокси
  • Таймаут 2000 мс настроен, fallback на стандартный поиск реализован
  • Порядок товаров из API сохраняется — повторная сортировка не применяется
  • Обрабатывается zeroQueries: true при totalHits > 0 — показываются альтернативные товары с плашкой
  • Обрабатывается zeroQueries: true при totalHits = 0 — показывается страница нулевой выдачи
  • Отправляется трекинг-событие SEARCH_EVENT на каждую страницу выдачи
  • searchTerm в трекинге — исправленный запрос (при наличии Autocomplete — correction из Autocomplete API)
  • Если интегрирован Autocomplete — в параметр st API sort передаётся поле correction из ответа Autocomplete API
  • Пагинация реализована через offset, не дублирует товары
  • Фасеты запрашиваются в том же запросе через withFacets=true
  • Недоступные товары при showUnavailable=true отображаются с пометкой, не скрываются
  • При исправлении запроса пользователю показывается плашка с оригинальным вариантом
  • Поле oldPrice используется для отображения зачёркнутой цены при наличии скидки