Поиск

В этой статье вы узнаете об архитектуре и логике работы поисковой системы
Изображение статьи

Процесс индексации

1. Автор обновляет контент в Studio.

2. Studio уведомляет Deployer об изменениях в конкретной цели (Target), которая представляет собой комбинацию сайта/среды. Затем:

  • При предварительном обновлении Deployer проверяет sandbox  и обрабатывает изменения (resolve changes), выполняя сравнение файлов между последней обработанной версией Git и последней версией в файлеsandbox.
  • При публикации Studio перемещает изменения в published, а Deployer при доставке извлекает изменения.

3. Процессор цели (Target Processor) в Deployer отправляет запрос в Elastic Search с XML или содержимым для индексации.

Процесс запроса

1. Конечный пользователь запрашивает страницу или сервис-запрос в CMS Engine.

2. Компоненты CMS Engine, которым требуются запросы, отправляют запрос в Elastic Search, где к запросу будут добавлены простые фильтры, а затем выполнены.

Описание подсистемы поиска

Подсистема поиска состоит из двух микросервисов (search и search-orchestration) и непосредственно поискового движка (elastisearch).
Подсисетма предоставляет возможность добавить данные в поисковой движок и далее осуществлять поиск по данным, а также аггрегацию данных.

Изображение статьи

Сущность индекса (схема данных)

Схема данных в индексе сделана по аналогии с схемой продукта в сервисе catalog и обагащена аналогично обогащению ценами и стоками в сервисе catalog-orchestration.
Итоговая структура документа (сущности):

{
    "id": "coffee-cup",
    "name": "Espresso-Cup",
    "description": "<p>Very nice branded espresso cup.</p>",
    "images": [
        {
            "type": "GALLERY",
            "url": "https://uploads-ssl.webflow.com/5f4d4a1634bebb66e5a60983/6177c966a4bcb1dd342a16db_2021-10-26_11-24-35.png"
        }
    ],
    "attributeValues": {
        "color": {
            "id": "black",
            "name": "Black"
        }
    },
    "categories": {
        // ключ это уровень категории в дереве каталога начиная с 0, гле 0 - уровень корневой категории
        "0": {
            "id": "root-category",
            "name": "Root category",
            "level": 0
        },
        "1": {
            "id": "cat00001",
            "name": "Category 1",
            "parentId": "root-category",
            "level": 1
        },
        "2": {
            "id": "cat00002",
            "name": "Category 2",
            "parentId": "cat00001",
            "level": 2
        }
    },
    // ключ это идентификатор валюты из сервиса price
    "prices": {
        "02d3eb94-8d0c-4e21-a952-db8684a1534d": 8.00,
        "90e5fed1-1eaa-4e45-8574-b687605817fd": 10.00
    },
    "stockStatus": "IN_STOCK"
}

Copy-icon

Сервис search

Сервис searсh включает в себя функционал по индексации (добавлению данных) списка сущностей, поиск по этим сущностям и аггрегацию (получаение фасетов) полей этих сущностей. 

Сервис search-orchestration

Сервис содержит базовый функционал по индексации (добавлению данных) в индекс по-умолчанию.