Настройка сервиса глобального поиска версии 2.0
Компоненты глобального поиска
Для установки компонентов глобального поиска используются два отдельных сервера — физические или виртуальные машины. Перечень системных требований к серверам для установки сервиса глобального поиска приведен в статье “Настройка глобального поиска”.
Разворачивается на сервере 1:
elasticsearch — поисковый движок.
Разворачиваются на сервере 2:
postgres — база данных конфигурирования компонентов глобального поиска.
rabbitmq — брокер сообщений.
redis — хранилище данных, используемое для кеширования и быстродействия.
gs-web-api — web-сервис конфигурирования компонентов глобального поиска.
gs-web-indexing-service — web-сервис для обработки запросов точечного индексирования данных из системы.
gs-scheduler — планировщик задач индексации данных из Creatio в ElasticSearch.
gs-worker — компонент индексирования данных из Creatio в ElasticSearch по задачам планировщика.
gs-worker-replay — компонент, обрабатывающий результаты индексации (результаты работы gs-worker-а).
gs-worker-single — компонент точечной индексации данных бизнес-процессов в ElasticSearch по запросу из бизнес-процесса.
gs-worker-single-replay — компонент, обрабатывающий исключения в процессе точечной индексации (результаты работы gs-worker-single).
gs-worker-single-task — компонент для постановки задач компоненту gs-worker-single.
gs-worker-querried-single-task — компонент для формирования задач компоненту gs-worker-single.
Для настройки компонентов скачайте исходные файлы. Скачать файлы.
Список портов, используемых компонентами глобального поиска
Важно
Если вы используете FireWall, убедитесь, что все перечисленные порты доступны и открыты.
Название компонента | Исходящий порт | Входящий порт | Примечание |
---|---|---|---|
gs-web-api |
| 81 | Входящий порт настраивается переменной WEB_API_PORT |
gs-web-indexing-service |
| 82 | Входящий порт настраивается переменной WEB_INDEXING_SERVICE_PORT |
gs-worker | 9200 |
| Необходимо соединение с сервером, на котором расположен elasticsearch |
gs-worker-single | 9200 |
| Необходимо соединение с сервером, на котором расположен elasticsearch |
elasticsearch |
| 9200 |
|
Последовательность действий для настройки глобального поиска
1.Установить Docker на физическую или виртуальную машину с операционной системой Linux. Подробнее >>>
2.Установить Docker-Compose. Подробнее >>>
3.Установить ElasticSearch. Подробнее >>>
4.Настроить переменные контейнеров. Подробнее >>>
5.Установить и запустить компоненты Global Search Service. Подробнее >>>
6.Подключить функциональность глобального поиска в Creatio. Подробнее >>>
Для разворачивания компонентов глобального поиска необходимо установить Docker на операционную систему Linux. Для установки воспользуйтесь инструкцией в документации Docker.
Для проверки установленной версии Docker запустите команду docker --version на linux-машине.
Для установки Docker-Compose воспользуйтесь инструкцией в документации Docker.
На заметку
В данной инструкции описано разворачивание ElasticSearch в Docker-Compose. Вы также можете развернуть его как daemon OS, что позволит обойтись без предварительной установки Docker и Docker-Compose. Для этого воспользуйтесь инструкцией в документации ElasticSearch.
Для установки ElasticSearch:
1.На сервере, выделенном для установки ElasticSearch (сервер 1), зайдите в папку /opt.
2.Распакуйте в открытую папку архив с установочными файлами. Скачать архив
3.Перейдите в папку с компонентами /opt/compose/elasticsearch и выполните команду:
docker-compose up -d
Команда может выполняться несколько минут.
4.После выполнения команды проверьте, что в логах нет ошибок. Для этого выполните команду
docker logs es-01
Настройка переменных контейнеров
Все контейнеры компонентов глобального поиска конфигурируются из файла с переменными среды (environment variables). Переменные содержатся в файле /opt/docker-compose/services/.env. Установите значения переменных, отредактировав этот файл.
Название переменной | Описание | Значение по умолчанию |
---|---|---|
GS_ES_URL | Внешний хост ElasticSearch, который используется для доступа из Creatio. Необходимо указать ip-адрес сервера, на котором развернут ElasticSearch. | http://[ip-адрес сервера ElasticSearch]:9200 |
Дополнительные переменные, которые управляют параметрами индексации данных в ElasticSearch
Название переменной | Описание | Значение по умолчанию |
---|---|---|
GS_DB_INCREMENT_DAYS | Количество дней, которое необходимо проиндексировать за одну итерацию планировщика. Для сравнения используются данные колонки ModifiedOn записей системы. | 500 дней |
GS_DB_FILL_QUEUE_INTERVAL | Интервал сбора данных из БД Creatio регулярным планировщиком. Чем меньше этот параметр, тем выше нагрузка на БД Creatio, но быстрее происходит первичная индексация. | 30000 (указывается в миллисекундах) |
Запуск контейнеров с компонентами Global Search Service
Важно
Для корректной работы контейнеров необходимо, чтобы UTC-время на linux-машине, на которой установлен Docker, соответствовало UTC-времени на сервере БД Creatio. Допустимое отклонение — до пяти минут. Иначе глобальный поиск может индексировать не все записи.
1.На сервере, выделенном для установки компонентов глобального поиска (сервер 2), зайдите в папку opt.
2.Распакуйте в открытую папку архив с установочными файлами. Скачать архив
3.Перейдите в папку с компонентами /opt/compose/services и выполните команду:
docker-compose up -d
Проверка удачного запуска контейнеров
Для просмотра всех запущенных контейнеров глобального поиска введите в консоли команду:
docker ps --filter "label=service=gs" -a --format "table {{.Names}}\t{{.Ports}}\t{{.Status}}\t{{.RunningFor}}"
Все запущенные контейнеры должны быть со статусом Up.
Логирование
По умолчанию в контейнере логирование происходит в stdout и stderr.
На заметку
docker logs --tail 100 gs-worker-01 выводит 100 последних строк логов из контейнера gs-worker.
На заметку
При старте возможны ситуации, когда контейнер mysql или rabbitmq временно недоступны, так как они запускаются позже остальных компонентов. В этом случае дождитесь, пока в логах не отобразится сообщение об удачном подключении и запуске контейнера, например: “Now listening on: http://[::]:80 Application started. Press Ctrl+C to shut down”.
Подключение сервиса глобального поиска в Creatio
Действия на сервере
Для подключения глобального поиска к Creatio выполните следующие действия на сервере 2, где находятся компоненты глобального поиска:
1.Для http-запросов установите утилиту api-get install curl или yum install curl.
apt-get install curl
2.Выполните http-запрос на регистрацию сайта в глобальном поиске, указав:
•[DATABASE_TYPE] — тип базы данных Creatio (mssql, postgresql или oracle).
•[DATABASE_CONNECTION_STRING] — строка подключения к БД Creatio.
•[SITE_NAME] — название сайта Creatio, например, my-test-site.
•[SERVER2_IP_ADDRESS] — IP-адрес linux сервера, на котором развернуты компоненты глобального поиска.
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]*
Пример для MS SQL
curl -v -X POST -d '{"databaseType": "mssql", "databaseConnectionString": "Server=myserver\\mssql2016; Database=my-test-site; User Id=my-login; Password='my-password'; Connection Timeout=10"}' -H "Content-Type: application/json" http://[gs-webapi]:81/sites/my-test-site
Пример для PostgreSQL
server=[SERVER_IP];port=5432;database=[DB_NAME];user id=[USER_NAME];password=[PASSWORD];timeout=10;commandtimeout=400;maxpoolsize=1024
3.Выполните http-запрос на подключение поиска к ранее добавленному сайту, указав:
•[SITE_NAME] — название сайта Creatio, например, my-test-site;
•[TEMPLATE_NAME] — название шаблона поиска, который используется в ElasticSearch. Перечень доступных к использованию шаблонов приведен в таблице ниже.
•[SERVER2_IP_ADDRESS] — IP-адрес linux сервера, на котором развернуты компоненты глобального поиска.
curl -v -X POST -d '{"templateName": "[TEMPLATE_NAME]"}' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/sites/[SITE_NAME]/search
Пример
curl -v -X POST -d '{"templateName": "default.json"}' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/sites/my-test-site/search
На заметку
Приведенный запрос вернет URL к созданному индексу в ElasticSearch. URL нужно сохранить и использовать в приведенном ниже sql-скрипте установки системных настроек.
Важно
Чтобы изменить шаблон поиска, выполните DELETE запрос на /sites/{siteName}/search и действие AddSearch, описанное выше, после чего будет выполнена полная переиндексация сайта.
Все доступные шаблоны поиска и их характеристики приведены в таблице ниже:
| Старый шаблон (версия 1.6) | default.json | ngram_2.json | ngram_3.json | without_ngram.json |
---|---|---|---|---|---|
Поиск по части слова | + | – | + | + | – |
Поиск по слову с опечатками | + | – | + | + | – |
Поиск по части номера телефона в средствах связи | + | + | + | + | – |
Нечеткий поиск по средствам связи | + | + | + | + | – |
Поиск с перестановкой слов | + | + | + | + | + |
Поиск по точному совпадению | + | + | + | + | + |
Поиск по двум символам | – | – | + | – | – |
Примерная скорость поиска (чем меньше, тем лучше) |
| 1х | 13х | 7х | <1х |
Размер индекса на elasticsearch (чем меньше, тем лучше) |
| 1х | 4х | 2,5х | <1х |
Время полной первичной индексации (чем меньше, тем лучше) |
| 1х | 1,8х | 1,4х | <1х |
Действия на стороне Creatio
Для СУБД MS SQL
1.Включите в Creatio функциональность (Feature Toggle) глобального поиска (GlobalSearch, GlobalSearch_V2 GlobalSearchRelatedEntityIndexing), выполнив sql-скрипт:
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
2.Установите значения системных настрек:
•“GlobalSearchUrl” — полный путь в elasticsearch с учетом индекса. Значение настройки возвращается при выполнении запроса на web-api для добавления поиска для сайта.
•“GlobalSearchConfigServiceURL” — ссылка на API глобального поиска. Значение по умолчанию: http://[SERVER2_IP_ADDRESS]:81.
•“GlobalSearchIndexingApiUrl” — ссылка на сервис моментальной индексации. Значение по умолчанию: http://[SERVER2_IP_ADDRESS]:82.
Для этого выполните следующий скрипт:
UPDATE SysSettingsValue
SET TextValue = [укажите URL к индексу ElasticSearch, строка типа: http://external.elasticsearch:9200/indexname]
WHERE SysSettingsId = (SELECT TOP 1 Id FROM SysSettings WHERE Code ='GlobalSearchUrl')
UPDATE SysSettingsValue
SET TextValue = [укажите URL к Global Search Service, строка типа: http://SERVER2_IP_ADDRESS:81]
WHERE SysSettingsId = (SELECT TOP 1 Id FROM SysSettings WHERE Code ='GlobalSearchConfigServiceUrl')
UPDATE SysSettingsValue
SET TextValue = [укажите URL к Global Search Indexing Service, строка типа: http://SERVER2_IP_ADDRESS:82]
WHERE SysSettingsId = (SELECT TOP 1 Id FROM SysSettings WHERE Code ='GlobalSearchIndexingApiUrl')
3.Перезапустите приложение Creatio, очистите redis и выполните вход в приложение.
Для СУБД Oracle
1.Включите в Creatio функциональность (Feature Toggle) глобального поиска (GlobalSearch, GlobalSearch_V2, GlobalSearchRelatedEntityIndexing), выполнив sql-скрипт:
CREATE OR REPLACE FUNCTION
generate_uuid return varchar2 is
v_uuid varchar2(38);
v_guid varchar2(32);
BEGIN
v_guid := sys_guid();
v_uuid := lower(
'{' ||
substr(v_guid, 1,8) || '-' ||
substr(v_guid, 9,4) || '-' ||
substr(v_guid, 13,4) || '-' ||
substr(v_guid, 17,4) || '-' ||
substr(v_guid, 21) ||
'}'
);
RETURN v_uuid;
END;
/
DECLARE
GS_REIndexingFeature VARCHAR(50) := 'GlobalSearchRelatedEntityIndexing';
GS_REIndexingFeatureId VARCHAR(38) := NULL;
GS_REIndexingFeatureId_GUID VARCHAR(38) := generate_uuid();
GlobalSearchFeature VARCHAR(50) := 'GlobalSearch';
GlobalSearchFeatureId VARCHAR(38) := NULL;
GlobalSearchFeatureId_GUID VARCHAR(38) := generate_uuid();
GlobalSearchV2Feature VARCHAR(50) := 'GlobalSearch_V2';
GlobalSearchV2FeatureId VARCHAR(38) := NULL;
GlobalSearchV2FeatureId_GUID VARCHAR(38) := generate_uuid();
allEmployeesId VARCHAR(38) := '{7F3B869F-34F3-4F20-AB4D-7480A5FDF647}';
State_GlobalSearch VARCHAR(1) := NULL;
State_GlobalSearchV2 VARCHAR(1) := NULL;
State_GS_REI VARCHAR(1) := NULL;
BEGIN
SELECT MAX("Id") INTO GlobalSearchFeatureId FROM "Feature" WHERE "Code" = GlobalSearchFeature AND rownum = 1;
SELECT MAX("Id") INTO GlobalSearchV2FeatureId FROM "Feature" WHERE "Code" = GlobalSearchV2Feature AND rownum = 1;
SELECT MAX("Id") INTO GS_REIndexingFeatureId FROM "Feature" WHERE "Code" = GS_REIndexingFeature AND rownum = 1;
SELECT MAX("FeatureState") INTO State_GlobalSearch FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchFeatureId AND rownum = 1;
SELECT MAX("FeatureState") INTO State_GlobalSearchV2 FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchV2FeatureId AND rownum = 1;
SELECT MAX("FeatureState") INTO State_GS_REI FROM "AdminUnitFeatureState" WHERE FeatureId" = GS_REIndexingFeatureId AND rownum = 1;
IF (GlobalSearchFeatureId IS NULL) THEN
INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchFeatureId_GUID, GlobalSearchFeature, GlobalSearchFeature);
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId_GUID);
ELSE
IF (State_GlobalSearch IS NOT NULL) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchFeatureId;
ELSE
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId_GUID);
END IF;
END IF;
IF (GlobalSearchV2FeatureId IS NULL) THEN
INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchV2FeatureId_GUID, GlobalSearchV2Feature, GlobalSearchV2Feature);
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId_GUID);
ELSE
IF (State_GlobalSearchV2 IS NOT NULL) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchV2FeatureId;
ELSE
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId_GUID);
END IF;
END IF;
IF (GS_REIndexingFeatureId IS NULL) THEN
INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GS_REIndexingFeatureId_GUID,GS_REIndexingFeature, GS_REIndexingFeature);
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_REIndexingFeatureId_GUID);
ELSE
IF (State_GS_REI IS NOT NULL) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" =GS_REIndexingFeatureId;
ELSE
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_REIndexingFeatureId_GUID);
END IF;
END IF;
END;
2.Установите значения системных настрек:
•“GlobalSearchUrl” — полный путь в elasticsearch с учетом индекса. Значение настройки возвращается при выполнении запроса на web-api для добавления поиска для сайта.
•“GlobalSearchConfigServiceURL” — ссылка на API глобального поиска. Значение по умолчанию: http://[SERVER2_IP_ADDRESS]:81.
•“GlobalSearchIndexingApiUrl” — ссылка на сервис моментальной индексации. Значение по умолчанию: http://[SERVER2_IP_ADDRESS]:82.
Для этого выполните следующий скрипт:
DECLARE
URL_SETTING_ID VARCHAR(38) := NULL;
CONFIG_URL_SETTING_ID VARCHAR(38) := NULL;
IND_API_SETTING_ID VARCHAR(38) := NULL;
URL_VAL_ID VARCHAR(38) := NULL;
CONFIG_URL_VAL_ID VARCHAR(38) := NULL;
IND_API_VAL_ID VARCHAR(38) := NULL;
SYS_ADMIN_UID VARCHAR(38) := '{A29A3BA5-4B0D-DE11-9A51-005056C00008}';
ES_IND VARCHAR(500) := '[укажите URL к индексу ElasticSearch, строка, сл. типа - http://external.elasticsearch:9200/indexname]';
CONFIG_URL VARCHAR(500) := '[укажите URL к Global Search Service, строка следующего типа: http://SERVER2_IP_ADDRESS:81]';
IND_API_URL VARCHAR(500) := '[укажите URL к Global Search Indexing Service, строка следующего типа: http://SERVER2_IP_ADDRESS:82]';
BEGIN
SELECT "Id" INTO URL_SETTING_ID FROM "SysSettings" WHERE "Code" = 'GlobalSearchUrl';
SELECT "Id" INTO CONFIG_URL_SETTING_ID FROM "SysSettings" WHERE "Code" = 'GlobalSearchConfigServiceUrl';
SELECT "Id" INTO IND_API_SETTING_ID FROM "SysSettings" WHERE "Code" = 'GlobalSearchIndexingApiUrl';
SELECT MAX("Id") INTO URL_VAL_ID FROM "SysSettingsValue" WHERE "SysSettingsId" = URL_SETTING_ID;
SELECT MAX("Id") INTO CONFIG_URL_VAL_ID FROM "SysSettingsValue" WHERE "SysSettingsId" = CONFIG_URL_SETTING_ID;
SELECT MAX("Id") INTO IND_API_VAL_ID FROM "SysSettingsValue" WHERE "SysSettingsId" = IND_API_SETTING_ID;
IF (URL_VAL_ID IS NULL)
THEN
INSERT INTO "SysSettingsValue"
("SysSettingsId", "SysAdminUnitId", "IsDef", "TextValue")
VALUES
(URL_SETTING_ID, SYS_ADMIN_UID, '1', ES_IND);
ELSE
UPDATE "SysSettingsValue" SET "TextValue" = ES_IND WHERE "SysSettingsId" = URL_SETTING_ID;
END IF;
IF (CONFIG_URL_VAL_ID IS NULL)
THEN
INSERT INTO "SysSettingsValue"
("SysSettingsId", "SysAdminUnitId", "IsDef", "TextValue")
VALUES
(CONFIG_URL_SETTING_ID, SYS_ADMIN_UID, '1', CONFIG_URL);
ELSE
UPDATE "SysSettingsValue" SET "TextValue" = CONFIG_URL WHERE "SysSettingsId" = CONFIG_URL_SETTING_ID;
END IF;
IF (IND_API_VAL_ID IS NULL)
THEN
INSERT INTO "SysSettingsValue"
("SysSettingsId", "SysAdminUnitId", "IsDef", "TextValue")
VALUES
(IND_API_SETTING_ID, SYS_ADMIN_UID, '1', IND_API_URL);
ELSE
UPDATE "SysSettingsValue" SET "TextValue" = IND_API_URL WHERE "SysSettingsId" = IND_API_SETTING_ID;
END IF;
END;
3.Перезапустите приложение Creatio, очистите redis и выполните вход в приложение.
Для СУБД PostgreSql
1.Включите в Creatio функциональность (Feature Toggle) глобального поиска (GlobalSearch, GlobalSearch_V2, GlobalSearchRelatedEntityIndexing), выполнив sql-скрипт:
DO $$
DECLARE
GlobalSearchFeature VARCHAR(50) := 'GlobalSearch';
GlobalSearchFeatureId uuid;
GlobalSearchV2Feature VARCHAR(50) := 'GlobalSearch_V2';
GlobalSearchV2FeatureId uuid;
GS_RelatedEntityIndexingFeature VARCHAR(50) := 'GlobalSearchRelatedEntityIndexing';
GS_RelatedEntityIndexingFeatureId 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 GS_RelatedEntityIndexingFeatureId FROM "Feature" WHERE "Code" =GS_RelatedEntityIndexingFeature LIMIT 1;
IF (GS_RelatedEntityIndexingFeatureId IS NOT NULL)
THEN
IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GS_RelatedEntityIndexingFeatureId) 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 $$;
2.Установите значения системных настрек:
•“GlobalSearchUrl” — полный путь в elasticsearch с учетом индекса. Значение настройки возвращается при выполнении запроса на web-api для добавления поиска для сайта.
•“GlobalSearchConfigServiceURL” — ссылка на API глобального поиска. Значение по умолчанию: http://[SERVER2_IP_ADDRESS]:81.
•“GlobalSearchIndexingApiUrl” — ссылка на сервис моментальной индексации. Значение по умолчанию: http://[SERVER2_IP_ADDRESS]:82.
Для этого выполните следующий скрипт:
UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к индексу ElasticSearch, строка следующего типа: http://external.elasticsearch:9200/indexname]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchUrl' LIMIT 1 );
UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к Global Search Service, строка следующего типа: http://SERVER2_IP_ADDRESS:81]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchConfigServiceUrl' LIMIT 1 );
UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к Global Search Indexing Service, строка, сл. типа - http://SERVER2_IP_ADDRESS:82]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchIndexingApiUrl' LIMIT 1 );
3.Перезапустите приложение Creatio, очистите redis и выполните вход в приложение.
Смотрите также
•Часто задаваемые вопросы по глобальному поиску и дедупликации