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

В этой статье вы узнаете о назначении, логике работы, конфигурации и методах микросервиса indexer.

Микросервис indexer служит для управления индексацией и добавления документов в поисковый движок.

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

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

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

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

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

Service context path

/api/indexer/

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

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

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

По умолчанию

{
  "env": {
    "JAVA_XMS": "XXm",
    "JAVA_XMX": "YYYm",
    "KAFKA_BROKER_ADDRESS": "сокет_для_брокера_kafka"
  }
}

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

{
  "env": {
    "LOGGING_LEVEL": "уровень_логирования",
    "SEARCH_ENGINE_URL": "url_доступа_к_поисковому_движку"
  }
}

Copy-icon

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

Работа с документами для поискового движка

  • Обновление или добавление (если такого документа в БД еще нет) документа (сущности ProductDocumentDto) в поисковом движке - PUT запрос, /v1/documents
Request parameters

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

Request body sample
{
  "id": "8289148DC",
  "productId": ""8289148DC",
  "catalogId": "c1000001DC",
  "name": "Футболка мужская",
  "title": "Футболка мужская",
  "description": "Очень хорошая мужская футболка.",
  "longDescription": "Очень хорошая мужская футболка. Отлично подойдет на лето.",
  "assets": [
    {
      "id": "262fc4d6-6414-4efb-ae17-9da53e643976",
      "media": {
        "url": "master/catalog/images/1727080928887-1882559365.jpg",
        "absoluteUrl": "https://ecom-media.digitalchief.tech/master/catalog/images/1727080928887-1882559365.jpg",
        "name": "VdCSfnclhGUQPbxf38uNw.jpg",
        "type": "PHOTO",
        "size": 89975,
        "resolution": "500x500 px"
      },
      "title": "VdCSfnclhGUQPbxf38uNw",
      "altAttr": "Майка",
      "description": "Майка",
      "sign": "",
      "tags": [
        ""
      ]
    }
  ],
  "type": "string",
  "attributeValues": {
    "additionalProp1": {
      "id": "black",
      "name": "Черный"
    },
    "additionalProp2": {
      "id": "black",
      "name": "Черный"
    },
    "additionalProp3": {
      "id": "black",
      "name": "Черный"
    }
  },
  "categories": {
    "additionalProp1": {
      "id": "c001",
      "name": "Одежда",
      "parentId": "c002",
      "level": 0
    },
    "additionalProp2": {
      "id": "c001",
      "name": "Одежда",
      "parentId": "c002",
      "level": 0
    },
    "additionalProp3": {
      "id": "c001",
      "name": "Одежда",
      "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

204 - операция выполнена успешно, документ обновлен или добавлен

  • Добавление документа (сущности ProductDocumentDto) в поисковый движок - POST запрос, /v1/documents
Request parameters

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

Request body sample

{
  "id": "8289148DC",
  "productId": ""8289148DC",
  "catalogId": "c1000001DC",
  "name": "Футболка мужская",
  "title": "Футболка мужская",
  "description": "Очень хорошая мужская футболка.",
  "longDescription": "Очень хорошая мужская футболка. Отлично подойдет на лето.",
  "assets": [
    {
      "id": "262fc4d6-6414-4efb-ae17-9da53e643976",
      "media": {
        "url": "master/catalog/images/1727080928887-1882559365.jpg",
        "absoluteUrl": "https://ecom-media.digitalchief.tech/master/catalog/images/1727080928887-1882559365.jpg",
        "name": "VdCSfnclhGUQPbxf38uNw.jpg",
        "type": "PHOTO",
        "size": 89975,
        "resolution": "500x500 px"
      },
      "title": "VdCSfnclhGUQPbxf38uNw",
      "altAttr": "Майка",
      "description": "Майка",
      "sign": "",
      "tags": [
        ""
      ]
    }
  ],
  "type": "string",
  "attributeValues": {
    "additionalProp1": {
      "id": "black",
      "name": "Черный"
    },
    "additionalProp2": {
      "id": "black",
      "name": "Черный"
    },
    "additionalProp3": {
      "id": "black",
      "name": "Черный"
    }
  },
  "categories": {
    "additionalProp1": {
      "id": "c001",
      "name": "Одежда",
      "parentId": "c002",
      "level": 0
    },
    "additionalProp2": {
      "id": "c001",
      "name": "Одежда",
      "parentId": "c002",
      "level": 0
    },
    "additionalProp3": {
      "id": "c001",
      "name": "Одежда",
      "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 - операция успешно выполнена, документ индексирован

  • Удаление документа (сущности ProductDocumentDto) из поискового движка - DELETE запрос, /v1/documents/{id}
Request parameters

id - path-параметр, обязательный: уникальный идентификатор документа

Copy-icon
Response sample

Отсутствует. В ответе приходит только код операции, например, 204.

Response codes

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

Работа с индексацией

  • Запуск полной индексации каталога - POST запрос, /v1/index/perform-baseline
Request parameters

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

Request body sample

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

Response sodes

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

  • Запуск запланированной полной индексации каталога - POST запрос, /v1/index/perform-baseline/scheduled
Request parameters

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

Copy-icon
Request body sample

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

Response sodes

202 - операция выполнена успешно, запланированная задача индексации запущена

  • Удаление сценария индексации по его названию - DELETE запрос, /v1/index/{indexName}
Request parameters

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

Copy-icon
Response sample

Отсутствует. В ответе приходит только код операции, например, 202.

Response codes

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

Запланированная индексация цен

  • Запуск запланированной частичной индексации цены - POST запрос, /v1/index/scheduled/price
Request parameters

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

Request body sample

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

Response sodes

201 - операция выполнена успешно, задача по запланированной частичной индексации цены выполнена;

404 - задача по запланированной индексации цены по указанному jobId не найдена

Запланированная полная индексация Copy-icon

  • Создание задачи запланированной полной индексации - POST запрос, /v1/index/scheduled/baseline
Request parameters

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

Request body sample

{
  "name": "string",
  "scheduleType": "SIMPLE",
  "cron": "string",
  "time": "2025-03-03T10:28:49.571Z",
  "interval": 1
}

Copy-icon
Response codes

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

  • Получение страницы с отфильтрованными задачами запланированной полной индексации - POST запрос, /v1/index/scheduled/baseline/page
Request parameters

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

Request body sample
{
  "sort": [
    {
      "sortBy": "string",
      "direction": "ASC"
    }
  ],
  "page": 0,
  "size": 1,
  "filter": {
    "searchTerm": "string",
    "name": "string",
    "type": [
      "SIMPLE"
    ],
    "status": [
      "PENDING"
    ],
    "startDate": "2025-03-03T10:37:00.263Z",
    "endDate": "2025-03-03T10:37:00.263Z"
  }
}
Copy-icon
Responce sample
{
  "totalPages": 0,
  "totalElements": 0,
  "first": true,
  "last": true,
  "size": 0,
  "content": [
    {
      "id": "string",
      "name": "string",
      "scheduleType": "SIMPLE",
      "cron": "string",
      "time": "2025-03-03T10:41:44.920Z",
      "interval": 1,
      "status": "PENDING",
      "lastExecution": "2025-03-03T10:41:44.920Z"
    }
  ],
  "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
}
Copy-icon
Response codes

200 - операция выполнена успешно, страница с отфильтрованными задачами получена

  • Получение списка с отфильтрованными задачами запланированной полной индексации - POST запрос, /v1/index/scheduled/baseline/list
Request parameters

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

Request body sample
{
  "searchTerm": "string",
  "name": "string",
  "type": [
    "SIMPLE"
  ],
  "status": [
    "PENDING"
  ],
  "startDate": "2025-03-03T10:46:25.391Z",
  "endDate": "2025-03-03T10:46:25.391Z"
}
Copy-icon
Responce sample
[
  {
    "id": "string",
    "name": "string",
    "scheduleType": "SIMPLE",
    "cron": "string",
    "time": "2025-03-03T10:46:25.392Z",
    "interval": 1,
    "status": "PENDING",
    "lastExecution": "2025-03-03T10:46:25.392Z"
  }
]
Copy-icon
Response codes

200 - операция выполнена успешно, список с отфильтрованными задачами получен

  • Получить задачу запланированной полной индексации по ID - GET запрос, /v1/index/scheduled/baseline/{id}
Request parameters

id - path-параметр, обязательный: ID задачи индексации

Copy-icon
Responce sample
{
  "id": "string",
  "name": "string",
  "scheduleType": "SIMPLE",
  "cron": "string",
  "time": "2025-03-03T11:00:34.671Z",
  "interval": 1,
  "status": "PENDING",
  "lastExecution": "2025-03-03T11:00:34.671Z"
}
Copy-icon
Response codes

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

400 - задача запланированной индексации по указанному ID не найдена

  • Удаление задачи запланированной полной индексации по ID - DELETE запрос, /v1/index/scheduled/baseline/{id}
Request parameters

id - path-параметр, обязательный: ID задачи индексации

Copy-icon
Response sample

Отсутствует. В ответе приходит только код операции, например, 202.

Response codes

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

400 - задача запланированной индексации по указанному ID не найдена

  • Обновление задачи запланированной полной индексации по ID - PATCH запрос, /v1/index/scheduled/baseline/{id}
Request parameters

id - path-параметр, обязательный: ID задачи индексации

Copy-icon
Request body sample
{
  "name": "string",
  "scheduleType": "SIMPLE",
  "cron": "string",
  "time": "2025-03-03T11:21:13.253Z",
  "interval": 1
}
Copy-icon
Responce sample
{
  "id": "string",
  "name": "string",
  "scheduleType": "SIMPLE",
  "cron": "string",
  "time": "2025-03-03T11:21:13.253Z",
  "interval": 1,
  "status": "PENDING",
  "lastExecution": "2025-03-03T11:21:13.253Z"
}
Copy-icon
Response codes

200 - операция выполнена успешно, задача запланированной индексации обновлена

400 - задача запланированной индексации по указанному ID не найдена

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

Индексация

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