Микросервис search-orchestration

В статье описываются функции, логика работы, конфигурация и методы микросервиса search-orchestration.

Микросервис search-orchestration предоставляет функциональность для управления индексацией и работы с поиском.

Доступ к сервису предоставляется по запросу.

Логика работы

В работе микросервиса в эндпоинте POST /search/products используется сущность ProductDocumentDto, которая содержит информацию о продукте (идентификатор, цена, доступность на складе, описание, и др.).

Аутентификация

При обращении к сервису аутентификация не нужна.

Service context path

/api/search-orchestration/

Настройки и параметры конфигураци

Параметры конфигурации указываются в Vault.

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

По умолчанию

{
  "env": {
    "JAVA_XMS": "XXm",
    "JAVA_XMX": "YYYm",
    "LOGGING_FORMAT": "формат_логирования",
    "LOGGING_LEVEL": "уровень_логирования",
    "SERVER_PORT": "порт_сервера"
  }
}

Copy-icon
Указываемые на каждом отдельном стенде

// пример взят с тестового стенда


{
  "env": {
    "AVAILABILITY_URL": "url_путь_доступа_ к_сервису_availability",
    "CATALOG_URL": "url_путь_доступа_ к_сервису_catalog",
    "PRICE_URL": "url_путь_доступа_ к_сервису_price",
    "PROMO_URL": "url_путь_доступа_ к_сервису_promo",
    "SEARCH_URL": "url_путь_доступа_ к_сервису_search",
    "SPRING_OAUTH_AUTHORITY": "домен_сервера_аутентификации",
    "SPRING_OAUTH_CLIENT_ID": "client_id"
  }
}


Copy-icon

Методы микросервиса Copy-icon

Работа с индексом Copy-icon

  • Индексация мультивариативных продуктов - POST запрос, /v2/index
Request parameters

Отсутствуют.

Request body sample

Отсутствует.

Response sample

Отсутствует.

Response codes

202 - индексация прошла успешно

  • Удаление индекса со всеми продуктами - DELETE запрос, /v1/index/{indexName}
Request parameters

indexName - path-параметр, обязательный: название индекса

Copy-icon
Response codes

202 - операция по удалению индекса выполнена успешно

Работа с поиском Copy-icon

  • Поиск продуктов по каталогу - POST запрос, /v1/search/products
Request parameters

currencyId - query-параметр, обязательный: идентификатор валюты, по которой осуществляется поиск продуктов

Copy-icon
Request body sample

{
  "term": "Flask", // поисковое слово
  "facets": [ // набор фильтров, по которым осуществляется поиск продуктов
    {
      "name": "color",
      "value": [
        "Black",
        "Red"
      ]
    }
  ],
  "ranges": [ // набор ранжированных фильтров, таких как цена
    {
      "name": "price",
      "start": 0,
      "end": 0
    }
  ],
  "sort": [ // значение сортировки
    "id:asc",
    "name"
  ],
  "page": 0, // номер страницы
  "size": 10 // количество показываемых продуктов
}

Copy-icon
Response sample

{
  "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
}

Copy-icon
Response codes

200 - операция прошла успешно

  • Поиск фильтров - POST запрос, /v1/search/facets
Request parameters

currencyId - query-параметр, обязательный: идентификатор валюты, по которой осуществляется поиск продуктов

Copy-icon
Request body sample

{
  "term": "Flask", // поисковое слово
  "facets": [ // набор фильтров, по которым осуществляется поиск продуктов
    {
      "name": "color",
      "value": [
        "Black",
        "Red"
      ]
    }
  ],
  "ranges": [ // набор ранжированных фильтров, таких как цена
    {
      "name": "price",
      "start": 0,
      "end": 0
    }
  ]
}

Copy-icon
Response sample

//возвращает набор фильтров, доступных по поиску.

{
  "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": "Тест"
              }
            ]
          }
        ]
      }
    ]
  }
}
Copy-icon
Response codes

200 - операция прошла успешно

  • Поиск при помощи фильтров и фасетов - POST запрос, /v1/search/filtered-facets
Request parameters

currencyId - query-параметр, обязательный: идентификатор валюты, по которой осуществляется поиск продуктов

Copy-icon
Request body sample

{
    "term": "",
    "facets": [
        {
            "name": "color",
            "value": []
        },
        {
            "name": "stock",
            "value": [
                "IN_STOCK"
            ]
        }
    ],
    "ranges": [
        {
            "name": "price",
            "start": 3,
            "end": 10
        }
    ]
}

Copy-icon
Response sample

{
    "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": "Коврики"
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

Copy-icon
Response codes

200 - операция выполнена успешно