Микросервис search-orchestration
Микросервис search-orchestration предоставляет функциональность для работы с поиском и фильтрами.
Доступ к сервису предоставляется по запросу.
Логика работы
В работе микросервиса в эндпоинте POST /search/products используется сущность ProductDocumentDto, которая содержит информацию о продукте (идентификатор, цена, доступность на складе, описание, и др.).
Аутентификация
При обращении к сервису аутентификация не нужна.
Service context path
/api/search-orchestration/
Настройки и параметры конфигураци
Параметры конфигурации указываются в Vault.
Vault используется на нашей платформе в качестве хранилища всех конфигураций развертывания. Инструмент может быть выбран другой.
{
"env": {
"JAVA_XMS": "XXm",
"JAVA_XMX": "YYYm"
}
}
// пример взят с тестового стенда
{
"env": {
"OAUTH_ECOM_CLIENT_ID": "токен_приложения_ECOM_OAuth",
"OAUTH_ECOM_ISSUER_URI": "url_ECOM_OAuth",
"OAUTH_ZITADEL_CLIENT_ID": "токен_приложения_Zitadel"
}
}
Методы микросервиса
- Поиск продуктов по каталогу - POST запрос, /v1/search/products
currencyId - query-параметр, обязательный: идентификатор валюты, по которой осуществляется поиск продуктов
{
"term": "Flask", // поисковое слово
"facets": [ // набор фильтров, по которым осуществляется поиск продуктов
{
"name": "color",
"value": [
"Black",
"Red"
]
}
],
"ranges": [ // набор ранжированных фильтров, таких как цена
{
"name": "price",
"start": 0,
"end": 0
}
],
"sort": [ // значение сортировки
"id:asc",
"name"
],
"page": 0, // номер страницы
"size": 10 // количество показываемых продуктов
}
{
"content": [ //массив продуктов
{
"id": "1001471DC",
"productId": "1001470DC",
"name": "тест9",
"title": "тест9",
"description": "тест9",
"longDescription": null,
"assets": [
{
"id": "6480e675e529f80035202287",
"media": {
"url": "develop/catalog/images/1686169189501-1222327520.png",
"name": "fitnes-perchatki-006.png",
"type": "PHOTO",
"size": 257792,
"resolution": "427x427 px"
},
"title": "111332wewe",
"altAttr": "111",
"description": "0000",
"sign": "",
"tags": [
""
]
}
],
"type": null,
"attributeValues": {
"Цвет": {
"id": "красный",
"name": "красный"
},
"Упаковка": {
"id": "пластик",
"name": "Пластик"
},
"Страна производства": {
"id": "турция",
"name": "Турция"
}
},
"categories": {
"0": {
"id": "cat1000109DC",
"name": "Аксессуары",
"parentId": null,
"level": 0
},
"1": {
"id": "cat1000110DC",
"name": "Зонты",
"parentId": "cat1000109DC",
"level": 1
},
"2": {
"id": "cat1000169DC",
"name": "test",
"parentId": "cat1000110DC",
"level": 2
}
},
"prices": {
"02d3eb94-8d0c-4e21-a952-db8684a1534d": {
"unitPrice": 5420,
"discountUnitPrice": 5420
}
},
"stockStatus": "IN_STOCK"
},
...
],
"number": 0,
"size": 0,
"totalElements": 0,
"pageable": "INSTANCE",
"last": true,
"totalPages": 1,
"sort": {
"unsorted": true,
"sorted": false,
"empty": true
},
"first": true,
"numberOfElements": 0,
"empty": true
}
200 - операция прошла успешно
- Поиск фильтров - POST запрос, /v1/search/facets
currencyId - query-параметр, обязательный:
идентификатор валюты, по которой осуществляется поиск продуктов
{
"term": "Flask", // поисковое слово
"facets": [ // набор фильтров, по которым осуществляется поиск
продуктов
{
"name": "color",
"value": [
"Black",
"Red"
]
}
],
"ranges": [ // набор
ранжированных фильтров, таких как цена
{
"name": "price",
"start": 0,
"end": 0
}
]
}
//возвращает набор фильтров, доступных по
поиску.
{
"price": {
"count": 6,
"min": 10.1,
"max": 5420
},
"stock": {
"values": [
{
"count": 5,
"value": "IN_STOCK"
},
{
"count": 1,
"value": "OUT_OF_STOCK"
}
]
},
"category": {
"values":
[
{
"count": 6,
"value": "Аксессуары",
"childs": [
{
"count": 6,
"value": "Зонты",
"childs": [
{
"count": 5,
"value":
"Тест"
}
]
}
]
}
]
}
}
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": 11,
"min": 10,
"max": 15
},
"stock":
{
"values": [
{
"count": 11,
"value":
"IN_STOCK"
}
]
},
"category":
{
"values": [
{
"count": 1,
"value":
"Аксессуары",
"childs": [
{
"count": 1,
"value": "Сумки и рюкзаки",
"childs": [
{
"count": 1,
"value":
"Рюкзаки"
}
]
}
]
},
{
"count": 2,
"value":
"Женщинам",
"childs": [
{
"count": 2,
"value": "Шорты женские"
}
]
},
{
"count": 1,
"value": "Кулинария",
"childs":
[
{
"count": 1,
"value": "Горячие блюда",
"childs":
[
{
"count": 1,
"value": "Бургеры"
}
]
}
]
},
{
"count": 1,
"value": "Мужчинам",
"childs":
[
{
"count": 1,
"value": "Шорты"
}
]
},
{
"count": 6,
"value": "Спорт",
"childs": [
{
"count": 6,
"value": "Фитнес",
"childs":
[
{
"count": 2,
"value": "Аксессуары"
},
{
"count": 4,
"value": "Коврики"
}
]
}
]
}
]
}
}
200 - операция выполнена успешно