Микросервис search
Микросервис search используется в работе поиска и фильтрации.
Доступ к сервису предоставляется по запросу.
Логика работы 
В работе микросервиса используется сущность ProductDocumentDto, которая содержит информацию о продукте (идентификатор, цена, доступность на складе, описание, и др.). Функционал поиска ограничен совпадением со словами на продукте:
-
Без учета регистра;
-
Начала каждого слова в введенной фразе;
-
В разных полях (но пока те, что в пути имеют name);
- В любом порядке;
- Со схожим посимвольным написанием слова в другой языковой системе (доступна транслитерация с русского на английский и наоборот).
Виды фасетов:
-
Мульти выбор - Такой фасет при выборе нескольких значений составит выборку в семантике "значение 1 или значение 2", иначе "значение 1 и значение 2".
На текущий момент такой фасет - фасет цвета, при выборе красного и черного цветов, будут возвращены продукты, которые имеют один из этих цветов. Если бы фасет цвета был не мультивыборным, то вернулись бы продукты у которых присутствуют оба эти цвета. -
Влияние на аггрегацию - Данные фасеты влияют/не влияют на выдачу фасетов. Так как фасеты строятся по отфильтрованный выборке, то при выборе пользователем набора параметров, которые приводят к нулевой выборке, список фасетов будет пустым. Для этого фасеты цены и цвета не изменяют результаты выдачи фасетов, если переданы как выбранные параметры. !НО все фасеты всегда влияют на выборку продуктов.
-
Иерархический - данный фасет для каждого значения вернет список дочерних значений. На данный момент это фасет категории.
Аутентификация 
При обращении к сервису аутентификация не нужна.
Service context path 
/api/search/
Настройки и параметры конфигурации 
Параметры конфигурации указываются в Vault.
Vault используется на нашей платформе в качестве хранилища всех конфигураций развертывания. Инструмент может быть выбран другой.
{
"env": {
"JAVA_XMS": "XXm",
"JAVA_XMX": "YYYm"
}
}
// пример взят с тестового стенда
{
"env": {
"SEARCH_ENGINE_URL": "url_доступа_к_поисковому_движку",
"SPRING_OAUTH_AUTHORITY": "домен_сервера_аутентификации",
"SPRING_OAUTH_CLIENT_ID": "client_id"
}
}
Методы микросервиса
- Поиск продуктов по каталогу - POST запрос, /v1/search/products
currencyId - query-параметр, обязательный: идентификатор валюты, по
которой осуществляется поиск продуктов
{
"term": "Блузка",
"facets": [
{
"name": "Цвет",
"value": [
"Черный",
"Красный"
]
}
],
"ranges": [
{
"name": "Цвет",
"start": 0,
"end": 0
}
],
"sort": [
"id:asc",
"name"
],
"page": 0,
"size": 1
}
{
"totalPages": 0,
"totalElements": 0,
"first": true,
"last": true,
"size": 0,
"content": [
{
"id": "1000445DC",
"productId": "1000444DC",
"catalogId": "string",
"name": "Блузка шелковая",
"title": "Блузка шелковая",
"description": "Женская блузка - самая базовая вещь в любом гардеробе! Базовый женский топ прямого кроя уместен для офисной работы и экстравагантного вечера. Стильная рубашка имеет очень красивый воротничок. Боди из мягкой эластичной вискозы. Вещь создана привлечь все восторженные взгляды на любом празднике. Эта модель блузки может стать основой не только делового, но и вечернего гардероба.",
"longDescription": "Женская блузка - самая базовая вещь в любом гардеробе! Базовый женский топ прямого кроя уместен для офисной работы и экстравагантного вечера. Стильная рубашка имеет очень красивый воротничок. Боди из мягкой эластичной вискозы. Вещь создана привлечь все восторженные взгляды на любом празднике. Эта модель блузки может стать основой не только делового, но и вечернего гардероба.",
"assets": [
{
"id": "efb31435-6899-4088-a1da-8cd4a369095b",
"media": {
"url": "master/catalog/images/1704914104313-1882559365.png",
"absoluteUrl": "https://storage.yandexcloud.net/dc-demo-ecom-media-public/master/catalog/images/1704914104313-1882559365.png",
"name": "блузка синяя.png",
"type": "PHOTO",
"size": 903666,
"resolution": "900x1200 px"
},
"title": "Блузка",
"altAttr": "Блузка",
"description": "string",
"sign": "string",
"tags": [
"string"
]
}
],
"type": "string",
"featuresValues": {
"additionalProp1": [
"string"
],
"additionalProp2": [
"string"
],
"additionalProp3": [
"string"
]
},
"attributeValues": {
"additionalProp1": {
"id": "black",
"name": "Black"
},
"additionalProp2": {
"id": "black",
"name": "Black"
},
"additionalProp3": {
"id": "black",
"name": "Black"
}
},
"categories": {
"additionalProp1": {
"id": "cat1000057DC",
"name": "Женщинам",
"parentId": "cat1000057DC",
"level": 0
},
"additionalProp2": {
"id": "cat1000064DC",
"name": "Футболки и топы",
"parentId": "cat1000064DC",
"level": 1
},
"additionalProp3": {
"id": "cat1000100DC",
"name": "Блузки",
"parentId": "cat1000064DC",
"level": 2
}
},
"prices": "{f74b2e3d-53e4-4370-afdd-146488a88f6e=8.0,b9bf6563-783e-4127-a38f-00b266c6ba48=10.0}",
"stocks": [
{
"id": "string",
"quantity": 0,
"replenishmentTime": 0,
"locationId": "string",
"locationCode": "string",
"locationName": "string"
}
],
"stockStatus": "IN_STOCK",
"collection": {
"id": "f6933039-d7f5-45ff-9c72-515bb516c3cb",
"name": "Женская одежда",
"showPage": false,
"marker": false,
"filtering": false,
"status": "INACTIVE"
}
}
],
"number": 0,
"sort": [
[
{
"direction": "string",
"nullHandling": "string",
"ascending": true,
"property": "string",
"ignoreCase": true
}
]
],
"numberOfElements": 0,
"pageable": {
"paged": true,
"unpaged": true,
"pageNumber": 0,
"pageSize": 0,
"sort": {
"direction": "string",
"nullHandling": "string",
"ascending": true,
"property": "string",
"ignoreCase": true
},
"offset": 0
},
"empty": true
}
200 - операция выполнена успешно, возвращен список с продуктами, подходящими под поисковый запрос
- Поиск фасетов - POST запрос, /v1/search/facets
currencyId - query-параметр, обязательный:
идентификатор валюты, по которой осуществляется поиск продуктов
{
"term": "Flask",
"facets": [
{
"name": "color",
"value": [
"Black",
"Red"
]
}
],
"ranges": [
{
"name": "color",
"start": 0,
"end": 0
}
]
}
{
"size": {
"values": [
{
"count": 2,
"value": "s"
}
]
},
"color": {
"values": [
{
"count": 3,
"value": "black"
},
{
"count": 1,
"value":
"red"
}
]
},
"price":
{
"count": 33,
"min": 0.0,
"max": 6503.0
},
"category":
{
"values": [
{
"count": 10,
"value": "Верхняя
одежда "
},
{
"count": 6,
"value": "Куртки мужские"
},
{
"count":
13,
"value": "Одежда универсальная",
"childs": [
{
"count":
5,
"value": "Для женщин"
}
]
},
{
"count": 19,
"value": "Смартфоны",
"childs":
[
{
"count": 3,
"value": "iPhone"
}
]
},
{
"count": 1,
"value": "Универсальные товары",
"childs": [
{
"count":
1,
"value": "Одежда"
}
]
}
]
},
"stock": {
"values":
[
{
"count": 146,
"value":
"UNKNOWN"
},
{
"count": 47,
"value": "IN_STOCK"
},
{
"count": 11,
"value": "OUT_OF_STOCK"
}
]
}
}
200 - операция выполнена успешно
- Поиск при помощи фильтров и фасетов - POST запрос, /v1/search/filtered-facets
currencyId - query-параметр, обязательный: идентификатор валюты, по
которой осуществляется поиск продуктов
{
"term": "",
"facets": [
{
"name": "color",
"value": []
},
{
"name":
"stock",
"value": [
"IN_STOCK"
]
}
],
"ranges": [
{
"name": "price",
"start": 3,
"end": 10
}
]
}
{
"price": {
"count": 13,
"min": 3.0,
"max": 10.0
},
"stock":
{
"values": [
{
"count": 13,
"value":
"IN_STOCK"
}
]
},
"category":
{
"values": [
{
"count": 1,
"value":
"Аксессуары",
"childs": [
{
"count": 1,
"value": "Сумки и рюкзаки",
"childs": [
{
"count": 1,
"value":
"Рюкзаки"
}
]
}
]
},
{
"count": 4,
"value":
"Мужчинам",
"childs": [
{
"count": 4,
"value": "Шорты"
}
]
},
{
"count": 1,
"value": "Продукты",
"childs":
[
{
"count": 1,
"value": "Молоко, яйцо, масло",
"childs":
[
{
"count": 1,
"value": "Масло сливочное"
}
]
}
]
},
{
"count":
7,
"value": "Спорт",
"childs": [
{
"count": 7,
"value": "Фитнес",
"childs":
[
{
"count": 3,
"value": "Аксессуары"
},
{
"count": 4,
"value": "Коврики"
}
]
}
]
}
]
}
}
200 - операция выполнена успешно
- Получение значений фильтров по характеристикам - POST запрос, /v1/search/facets/features
categoryId - query-параметр: уникальный идентификатор категории
Отсутствует.
[
{
"name":"Глубина",
"values":[
"20 см"
],
"type":"TEXT"
},
{
"name":"Характеристика",
"values":[
"Цвет"
],
"type":"TEXT"
},
{
"name":"Упаковка",
"values":[
"Весовая, кг",
"Бумага",
"string",
"Стекло",
"Металл",
"новая упаковка",
"Картон",
"Пластик",
"Пленка",
"Коробка",
"Тара, 5кг",
"Green"
],
"type":"TEXT"
}
]
200 - операция выполнена успешно, получены значения фильтров по характеристикам