Развертывание сервиса глобального поиска через
Docker
Подготовка к развертыванию
Перед установкой сервиса глобального поиска выполните следующее:
- Для предоставления доступа к архиву с файлами для развертывания обратитесь в Техническую поддержку BPMSoft.
- Перед установкой убедитесь в том, что среда, на которую вы хотите устанавливать сервис, соответствует системным требованиям.
- Для работы установите Docker Desktop версии 4.3.0 и выше.
- Убедитесь, что в файле ConnectionStrings.config на стороне BPMSoft присутствует параметр elasticsearchCredentials.
Развертывание сервиса глобального поиска
Для развертывания сервиса необходимо:
- Создайте директорию для файлов Docker Compose:
mkdir /usr/gs
- Переместите файл docker-compose в домашнюю папку пользователя (~).
- Скопируйте и разархивируйте файлы docker-compose в новую директорию, заменив <release> на номер версии релиза.
cp ~/gs-<release>-docker.zip /usr/gs && cd /usr/gs && unzip gs-<release>-docker.zip
- Откройте поддиректорию src. В ней вы найдете файлы docker-compose.
cd src
- Для запуска инфраструктуры GlobalSearch выполните следующую команду
docker-compose -f docker-compose.infr.yaml up -d
- Перед запуском OpenSearch измените системную настройку:
sudo sysctl -w vm.max_map_count=262144
- Запустите поисковый движок OpenSearch. По умолчанию он будет доступен на порту 9200.
docker-compose -f docker-compose.opensearch.yml up -d
Перед запуском сервисов глобального поиска нужно настроить переменные окружения в файле .env.
Таблица 1 — Описание переменных окружения в файле .env
| Переменная | Описание | Значение по умолчанию |
| GS_SEARCH_URL | Укажите endpoint поискового движка OpenSearch | По умолчанию для локального развертывания используется http://host.docker.internal:9200 |
| DOCKER_TAG | Задайте версию GlobalSearch | - |
| DOCKER_REPO | Укажите репозиторий, откуда берутся образы сервисов GlobalSearch | По умолчанию используется bpmsoft/gs. Измените его, если используете прокси-репозиторий в закрытых сетях без доступа в интернет |
- Установите сервис глобального поиска:
docker-compose up -d
После этого запустятся все компоненты сервиса глобального поиска.
Настройка сервиса глобального поиска
Для подключения глобального поиска к системе необходимо выполнить следующие действия на сервере, где установлены компоненты глобального поиска:
- Для выполнения http-запросов необходимо установить инструмент curl. В терминале надо выполнить команду apt-get install curl или yum install curl.
- Выполните http-запрос на регистрацию сайта в глобальном поиске, указав:
- [DATABASE_TYPE] — тип базы данных системы (mssql или postgresql);
- [DATABASE_CONNECTION_STRING] — строка подключения к базе данных системы;
- [SITE_NAME] — название сайта системы, например, my-test-site;
- [SERVER2_IP_ADDRESS] — IP-адрес сервера, на котором развернуты компоненты глобального поиска.
curl -v -X POST -d '{"databaseType": "[DATABASE_TYPE]", "databaseConnectionString": "[DATABASE_CONNECTION_STRING]"}' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/sites/[SITE_NAME]*
- Выполните http-запрос на подключение поиска к ранее добавленному сайту, указав:
- [SITE_NAME] — название сайта системы, например, my-test-site;
- [TEMPLATE_NAME] — название шаблона поиска, который используется в Search Engine. Перечень доступных к использованию шаблонов приведен в таблице ниже;
- [SERVER2_IP_ADDRESS] — IP-адрес сервера, на котором развернуты компоненты глобального поиска.
curl -v -X POST -d '{"templateName": "[TEMPLATE_NAME]"}' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/sites/[SITE_NAME]/search
Приведенный запрос вернет URL к созданному индексу в Search Engine. URL нужно сохранить и использовать для установки значений системных настроек. Подробнее: Настройка на стороне BPMSoft
Чтобы изменить шаблон поиска, выполните DELETE запрос на /sites/{siteName}/search и http-запрос на подключение поиска, описанный выше, после чего будет выполнена полная переиндексация сайта.
Таблица 2 — Шаблоны поиска
| default.json | ngram_2.json | ngram_3.json | without_ngram.json | |
| Поиск по части слова | – | + | + | – |
| Поиск по слову с опечатками | – | + | + | – |
| Поиск по части номера телефона в средствах связи | + | + | + | – |
| Нечеткий поиск по средствам связи | + | + | + | – |
| Поиск с перестановкой слов | + | + | + | + |
| Поиск по точному совпадению | + | + | + | + |
| Поиск по двум символам | – | + | – | – |
| Примерная скорость поиска (чем меньше, тем лучше) | 1х | 13х | 7х | <1х |
| Размер индекса на Search Engine (чем меньше, тем лучше) | 1х | 4х | 2,5х | <1х |
| Время полной первичной индексации (чем меньше, тем лучше) | 1х | 1,8х | 1,4х | <1х |
Настройка на стороне BPMSoft
На стороне BPMSoft для работы с сервисом необходимо:
- Заполнить системные настройки:
- GlobalSearchUrl — ссылка на Search.Web.Api с названием индекса. Значение настройки возвращается при выполнении запроса на web-api для добавления поиска для сайта. Пример строки: http://[SERVER2_IP_ADDRESS]:[port]/[indexname]. Порт по умолчанию: 83;
- GlobalSearchConfigServiceURL — ссылка на Web.Api глобального поиска http://[SERVER2_IP_ADDRESS]:[port]. Порт по умолчанию: 81;
- GlobalSearchIndexingApiUrl — ссылка на Indexing.Web.Api глобального поиска http://[SERVER2_IP_ADDRESS]:[port]. Порт по умолчанию: 82.
- Включить в системе функциональность глобального поиска. Для включения функциональности глобального поиска (GlobalSearch, GlobalSearch_V2, GlobalSearchRelatedEntityIndexing) необходимо выполнить SQL-скрипт:
- Очистить кэш, перезапустить приложение системы и выполнить вход в приложение.
Используемые порты
Список портов, используемых компонентами глобального поиска:
Таблица 3 — Список используемых портов
| Название компонента | Исходящий порт | Входящий порт | Примечание |
| Web.Api | 81 | Входящий порт настраивается переменной services.web-app.ports | |
| Indexing.Web.Api | 82 | Входящий порт настраивается переменной services.indexing-service.ports | |
| Search.Web.Api | 9200 | 83 | Входящий порт настраивается переменной services.search-service.ports |
| Executer.Api | 9200 | Необходимо соединение с сервером, на котором расположен Search Engine | |
| Single.Executer.Api | 9200 | Необходимо соединение с сервером, на котором расположен Search Engine | |
| OpenSearch | 9200 |
Ресурсы
Скрипт включения функциональности для Microsoft SQL Server
DECLARE @GS_REIndexingFeature NVARCHAR(50) = 'GlobalSearchRelatedEntityIndexing';
DECLARE @GS_REIndexingFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE
Code = @GS_REIndexingFeature);
DECLARE @GlobalSearchFeature NVARCHAR(50) = 'GlobalSearch';
DECLARE @GlobalSearchFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @GlobalSearchFeature);
DECLARE @GlobalSearchV2Feature NVARCHAR(50) = 'GlobalSearch_V2';
DECLARE @GlobalSearchV2FeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @GlobalSearchV2Feature);
DECLARE @allEmployeesId UNIQUEIDENTIFIER = 'A29A3BA5-4B0D-DE11-9A51-005056C00008';
IF (@GlobalSearchFeatureId IS NOT NULL)
BEGIN
IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @GlobalSearchFeatureId)
UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @GlobalSearchFeatureId
ELSE
INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GlobalSearchFeatureId)
END;
ELSE
BEGIN
SET @GlobalSearchFeatureId = NEWID()
INSERT INTO Feature (Id, Name, Code) VALUES (@GlobalSearchFeatureId, @GlobalSearchFeature, @GlobalSearchFeature)
INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GlobalSearchFeatureId)
END;
IF (@GlobalSearchV2FeatureId IS NOT NULL)
BEGIN
IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @GlobalSearchV2FeatureId)
UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @GlobalSearchV2FeatureId
ELSE
INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1',@GlobalSearchV2FeatureId)
END;
ELSE
BEGIN
SET @GlobalSearchV2FeatureId = NEWID()
INSERT INTO Feature (Id, Name, Code) VALUES (@GlobalSearchV2FeatureId, @GlobalSearchV2Feature, @GlobalSearchV2Feature)
INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1',@GlobalSearchV2FeatureId)
END;
IF (@GS_REIndexingFeatureId IS NOT NULL)
BEGIN
IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @GS_REIndexingFeatureId)
UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @GS_REIndexingFeatureId
ELSE
INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GS_REIndexingFeatureId)
END;
ELSE
BEGIN
SET @GS_REIndexingFeatureId = NEWID()
INSERT INTO Feature (Id, Name, Code) VALUES (@GS_REIndexingFeatureId, @GS_REIndexingFeature, @GS_REIndexingFeature)
INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GS_REIndexingFeatureId)
END;
↑ Вернуться к шагу Настройка на стороне BPMSoft
Скрипт включения функциональности для PostgreSQL
DO $$
DECLARE
GlobalSearchFeature VARCHAR(50) := 'GlobalSearch';
GlobalSearchFeatureId uuid;
GlobalSearchV2Feature VARCHAR(50) := 'GlobalSearch_V2';
GlobalSearchV2FeatureId uuid;
GS_RelatedEntityIndexingFeature VARCHAR(50) := 'GlobalSearchRelatedEntityIndexing';
GS_RelatedEntityIndexingFeatureId uuid;
Bulk_ES_DD_Feature VARCHAR(50) := 'BulkESDeduplication';
Bulk_ES_DD_FeatureId uuid;
allEmployeesId uuid := 'A29A3BA5-4B0D-DE11-9A51-005056C00008';
BEGIN
SELECT "Id" INTO GlobalSearchFeatureId FROM "Feature"
WHERE "Code" = GlobalSearchFeature
LIMIT 1;
IF (GlobalSearchFeatureId IS NOT NULL)
THEN
IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchFeatureId) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchFeatureId;
ELSE
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId);
END IF;
ELSE
GlobalSearchFeatureId := uuid_generate_v4();
INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchFeatureId, GlobalSearchFeature, GlobalSearchFeature);
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId);
END IF;
SELECT "Id" INTO GlobalSearchV2FeatureId FROM "Feature"
WHERE "Code" = GlobalSearchV2Feature
LIMIT 1;
IF (GlobalSearchV2FeatureId IS NOT NULL)
THEN
IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchV2FeatureId) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchV2FeatureId;
ELSE
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId);
END IF;
ELSE
GlobalSearchV2FeatureId := uuid_generate_v4();
INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchV2FeatureId, GlobalSearchV2Feature, GlobalSearchV2Feature);
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId);
END IF;
SELECT "Id" INTO Bulk_ES_DD_FeatureId FROM "Feature"
WHERE "Code" = Bulk_ES_DD_Feature
LIMIT 1;
SELECT "Id" INTO GS_RelatedEntityIndexingFeatureId FROM "Feature" WHERE "Code" =GS_RelatedEntityIndexingFeature LIMIT 1;
IF (GS_RelatedEntityIndexingFeatureId IS NOT NULL)
THEN
IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = Bulk_ES_DD_FeatureId) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GS_RelatedEntityIndexingFeatureId;
ELSE
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_RelatedEntityIndexingFeatureId);
END IF;
ELSE
GS_RelatedEntityIndexingFeatureId := uuid_generate_v4();
INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GS_RelatedEntityIndexingFeatureId, GS_RelatedEntityIndexingFeature, GS_RelatedEntityIndexingFeature);
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_RelatedEntityIndexingFeatureId);
END IF;
END $$;
↑ Вернуться к шагу Настройка на стороне BPMSoft
Рекомендуем изучить
Сервис глобального поиска
Настройка дополнительных параметров сервиса глобального поиска