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

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

Микросервис search отвечает за управление индексацией и работу с поиском.

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

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

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

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

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

Service context path

/api/search/

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

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

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

По умолчанию

{
  "env": {
    "JAVA_XMS": "XXm",
    "JAVA_XMX": "YYYm",
    "SERVER_PORT": "порт_сервера"
  }
}

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

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


{
  "env": {
    "SEARCH_ENGINE_URL": "url_доступа_к_поисковому_движку",
    "SPRING_OAUTH_AUTHORITY": "домен_сервера_аутентификации",
    "SPRING_OAUTH_CLIENT_ID": "client_id",
    "STAND_NAME": "имя_стенда"
  }
}


Copy-icon

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

Добавление документов (сущности ProductDocumentDto) к поисковому движку - POST запрос, /v1/index/document

Request body sample

[
  {
    "id": "branded-shirt",
    "productId": "branded-shirt",
    "name": "Branded Shirt",
    "title": "Branded Shirt",
    "description": "Very nice branded Polo-Shirt in size XL.",
    "longDescription": "Very nice branded Polo-Shirt in size XL made from cotton in various colours.",
    "assets": [
      {
        "id": "string",
        "media": {
          "url": "string",
          "absoluteUrl": "string",
          "name": "string",
          "type": "string",
          "size": 0,
          "resolution": "string"
        },
        "title": "string",
        "altAttr": "string",
        "description": "string",
        "sign": "string",
        "tags": [
          "string"
        ]
      }
    ],
    "type": "string",
    "attributeValues": {
      "additionalProp1": {
        "id": "black",
        "name": "Black"
      },
      "additionalProp2": {
        "id": "black",
        "name": "Black"
      },
      "additionalProp3": {
        "id": "black",
        "name": "Black"
      }
    },
    "categories": {
      "additionalProp1": {
        "id": "c001",
        "name": "Clothe",
        "parentId": "c002",
        "level": 0
      },
      "additionalProp2": {
        "id": "c001",
        "name": "Clothe",
        "parentId": "c002",
        "level": 0
      },
      "additionalProp3": {
        "id": "c001",
        "name": "Clothe",
        "parentId": "c002",
        "level": 0
      }
    },
    "prices": "{f74b2e3d-53e4-4370-afdd-146488a88f6e=8.0,b9bf6563-783e-4127-a38f-00b266c6ba48=10.0}",
    "stockStatus": "IN_STOCK"
  }
]

Copy-icon
Response codes
  • 201 - операция успешно выполнена, документ индексирован
  • 500 - ошибка

Удаление всех документов (сущности ProductDocumentDto) из поискового движка - DELETE запрос, /v1/index/{indexName}

Request parameters

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

Copy-icon
Response codes

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

Работа с поиском

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

Request parameters

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

Copy-icon
Request body sample

{
    "term": "блузка",
    "facets": [
        {
            "name": "color",
            "value": []
        },
        {
            "name": "stock",
            "value": [
                "IN_STOCK"
            ]
        },
        {
            "name": "category",
            "value": []
        }
    ],
    "ranges": [],
    "page": 0,
    "size": 1000
}

Copy-icon
Response sample

{
    "content": [
        {
            "id": "1000445DC",
            "productId": "1000444DC",
            "name": "Блузка шелковая",
            "description": "Женская блузка - самая базовая вещь в любом гардеробе! Базовый женский топ прямого кроя уместен для офисной работы и экстравагантного вечера. Стильная рубашка имеет очень красивый воротничок. Боди из мягкой эластичной вискозы. Вещь создана привлечь все восторженные взгляды на любом празднике. Эта модель блузки может стать основой не только делового, но и вечернего гардероба.",
            "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": "",
                    "sign": "",
                    "tags": [
                        ""
                    ]
                }
            ],
            "attributeValues": {
                "Цвет": {
                    "id": "синий",
                    "name": "Синий"
                },
                "Размер": {
                    "id": "onesize",
                    "name": "Onesize"
                }
            },
            "categories": {
                "0": {
                    "id": "cat1000057DC",
                    "name": "Женщинам",
                    "level": 0
                },
                "1": {
                    "id": "cat1000064DC",
                    "name": "Футболки и топы",
                    "parentId": "cat1000057DC",
                    "level": 1
                },
                "2": {
                    "id": "cat1000100DC",
                    "name": "Блузки",
                    "parentId": "cat1000064DC",
                    "level": 2
                }
            },
            "prices": {
                "02d3eb94-8d0c-4e21-a952-db8684a1534d": {
                    "unitPrice": 25.00,
                    "discountUnitPrice": 25.00
                },
                "90e5fed1-1eaa-4e45-8574-b687605817fd": {
                    "unitPrice": 5500.00,
                    "discountUnitPrice": 5500.00
                }
            },
            "stockStatus": "IN_STOCK"
        },
        {
            "id": "1000446DC",
            "productId": "1000444DC",
            "name": "Блузка шелковая",
            "description": "Женская блузка - самая базовая вещь в любом гардеробе! Базовый женский топ прямого кроя уместен для офисной работы и экстравагантного вечера. Стильная рубашка имеет очень красивый воротничок. Боди из мягкой эластичной вискозы. Вещь создана привлечь все восторженные взгляды на любом празднике. Эта модель блузки может стать основой не только делового, но и вечернего гардероба.",
            "assets": [
                {
                    "id": "4f19256b-28f4-46ff-8f41-9259e796a1c8",
                    "media": {
                        "url": "master/catalog/images/1704914035989-1882559365.png",
                        "absoluteUrl": "https://storage.yandexcloud.net/dc-demo-ecom-media-public/master/catalog/images/1704914035989-1882559365.png",
                        "name": "блузка кр.png",
                        "type": "PHOTO",
                        "size": 810682,
                        "resolution": "900x1200 px"
                    },
                    "title": "Блузка",
                    "altAttr": "Блузка",
                    "description": "",
                    "sign": "",
                    "tags": [
                        ""
                    ]
                }
            ],
            "attributeValues": {
                "Цвет": {
                    "id": "красный",
                    "name": "Красный"
                },
                "Размер": {
                    "id": "onesize",
                    "name": "Onesize"
                }
            },
            "categories": {
                "0": {
                    "id": "cat1000057DC",
                    "name": "Женщинам",
                    "level": 0
                },
                "1": {
                    "id": "cat1000064DC",
                    "name": "Футболки и топы",
                    "parentId": "cat1000057DC",
                    "level": 1
                },
                "2": {
                    "id": "cat1000100DC",
                    "name": "Блузки",
                    "parentId": "cat1000064DC",
                    "level": 2
                }
            },
            "prices": {
                "02d3eb94-8d0c-4e21-a952-db8684a1534d": {
                    "unitPrice": 5500.00,
                    "discountUnitPrice": 5500.00
                }
            },
            "stockStatus": "IN_STOCK"
        },
        {
            "id": "1000490DC",
            "productId": "1000444DC",
            "name": "Блузка шелковая",
            "description": "Женская блузка - самая базовая вещь в любом гардеробе! Базовый женский топ прямого кроя уместен для офисной работы и экстравагантного вечера. Стильная рубашка имеет очень красивый воротничок. Боди из мягкой эластичной вискозы. Вещь создана привлечь все восторженные взгляды на любом празднике. Эта модель блузки может стать основой не только делового, но и вечернего гардероба.",
            "assets": [
                {
                    "id": "ebc2e041-094e-468f-b000-1a119eced36f",
                    "media": {
                        "url": "master/catalog/images/1704913879776-1882559365.png",
                        "absoluteUrl": "https://storage.yandexcloud.net/dc-demo-ecom-media-public/master/catalog/images/1704913879776-1882559365.png",
                        "name": "блузка.png",
                        "type": "PHOTO",
                        "size": 937547,
                        "resolution": "900x1200 px"
                    },
                    "title": "Блузка",
                    "altAttr": "Блузка",
                    "description": "",
                    "sign": "",
                    "tags": [
                        ""
                    ]
                },
                {
                    "id": "108a7141-3c36-446d-8610-dc0848f8bf3a",
                    "media": {
                        "url": "master/catalog/images/1704913879654-1882559365.png",
                        "absoluteUrl": "https://storage.yandexcloud.net/dc-demo-ecom-media-public/master/catalog/images/1704913879654-1882559365.png",
                        "name": "блузка1.png",
                        "type": "PHOTO",
                        "size": 747116,
                        "resolution": "900x1200 px"
                    },
                    "title": "Блузка",
                    "altAttr": "Блузка",
                    "description": "",
                    "sign": "",
                    "tags": [
                        ""
                    ]
                },
                {
                    "id": "1d7697b3-5030-466c-b056-94b4f690f9e0",
                    "media": {
                        "url": "master/catalog/images/1704913879570-1882559365.png",
                        "absoluteUrl": "https://storage.yandexcloud.net/dc-demo-ecom-media-public/master/catalog/images/1704913879570-1882559365.png",
                        "name": "блузка2.png",
                        "type": "PHOTO",
                        "size": 657672,
                        "resolution": "900x1200 px"
                    },
                    "title": "Блузка",
                    "altAttr": "Блузка",
                    "description": "",
                    "sign": "",
                    "tags": [
                        ""
                    ]
                }
            ],
            "attributeValues": {
                "Цвет": {
                    "id": "коричневый",
                    "name": "Коричневый"
                },
                "Размер": {
                    "id": "onesize",
                    "name": "Onesize"
                }
            },
            "categories": {
                "0": {
                    "id": "cat1000057DC",
                    "name": "Женщинам",
                    "level": 0
                },
                "1": {
                    "id": "cat1000064DC",
                    "name": "Футболки и топы",
                    "parentId": "cat1000057DC",
                    "level": 1
                },
                "2": {
                    "id": "cat1000100DC",
                    "name": "Блузки",
                    "parentId": "cat1000064DC",
                    "level": 2
                }
            },
            "prices": {
                "02d3eb94-8d0c-4e21-a952-db8684a1534d": {
                    "unitPrice": 27.00,
                    "discountUnitPrice": 27.00
                },
                "90e5fed1-1eaa-4e45-8574-b687605817fd": {
                    "unitPrice": 2300.00,
                    "discountUnitPrice": 2300.00
                }
            },
            "stockStatus": "IN_STOCK"
        }
    ],
    "number": 0,
    "size": 3,
    "totalElements": 3,
    "pageable": "INSTANCE",
    "last": true,
    "totalPages": 1,
    "sort": {
        "unsorted": true,
        "sorted": false,
        "empty": true
    },
    "first": true,
    "numberOfElements": 3,
    "empty": false
}

Copy-icon

Response codes:

200 - операция выполнена успешно, возвращен список с продуктами, подходящими под поисковый запрос

Поиск фасетов - POST запрос, /v1/search/facets

Request parameters

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

Copy-icon
Response sample

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

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

Copy-icon

Response codes:

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

Связанные статьи

 Микросервисы