Настройка сервиса глобального поиска версии 1.7
Разворачиваются на отдельных серверах:
rabbitmq — брокер сообщений.
elasticsearch — поисковый движок.
mysql — база данных конфигурирования компонентов глобального поиска.
redis — хранилище данных, используемое для кеширования и быстродействия.
Разворачиваются на одном сервере:
gs-web-api — 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.
Важно
Для продуктивной среды рекомендуем разворачивать компоненты ElasticSearch, RabbitMQ и MySQL в отказоустойчивых кластерах. Если перечисленные компоненты развернуты отдельно, то потребуется отключить развертывание этих компонентов в Docker-контейнере с помощью переменных RUN_RABBITMQ, RUN_ELASTICSEARCH и RUN_MYSQL.
Для настройки компонентов скачайте исходные файлы. Скачать файлы.
На заметку
Для демонстрационных целей можно развернуть все компоненты глобального поиска на одном сервере. Для этого в файле linux/onsite-custom-env укажите переменным RUN_RABBITMQ, RUN_ELASTICSEARCH, RUN_MYSQL значение “1”.
Список портов, используемых компонентами глобального поиска
Название компонента | Исходящий порт | Входящий порт | Примечание |
---|---|---|---|
gs-web-api | 6379 | 81 | Входящий порт настраивается переменной WEB_API_PORT |
gs-web-indexing-service | 5672 | 82 | Входящий порт настраивается переменной WEB_INDEXING_SERVICE_PORT |
gs-worker | 5672 9200 Порт MSSQL или Oracle |
| Порт MSSQL или Oracle — порт общения с БД Creatio |
gs-worker-single | 5672 9200 Порт MSSQL или Oracle |
| Порт MSSQL или Oracle — порт общения с БД Creatio |
gs-scheduler | 3306 5672 |
|
|
gs-worker-replay | 3306 5672 |
|
|
gs-worker-single-task | 3306 5672 6379 |
|
|
gs-worker-single-replay | 3306 5672 |
|
|
rabbitmq |
| 5672 |
|
elasticsearch |
| 9200 |
|
mysql |
| 3306 |
|
redis |
| 6379 |
|
Последовательность действий для настройки глобального поиска
1.Установить Docker на физическую или виртуальную машину с операционной системой Linux. Подробнее >>>
2.Установить ElasticSearch. Подробнее >>>
3.Установить RabbitMQ. Подробнее >>>
4.Настроить MySQL. Подробнее >>>
5.Настроить переменные контейнеров. Подробнее >>>
6.Установить и запустить компоненты Global Search Service. Подробнее >>>
7.Подключить функциональность глобального поиска в Creatio. Подробнее >>>
8.Выполнить первичное наполнение БД. Подробнее >>>
На заметку
Для демонстрационных приложений, у которых все компоненты глобального поиска установлены на одном сервере, шаги 2–4 выполнять не нужно.
Содержание
•Настройка переменных контейнеров
•Запуск контейнеров с компонентами Global Search Service
•Подключение сервиса глобального поиска в Creatio
Для разворачивания компонентов глобального поиска необходимо установить Docker на операционную систему Linux. Для установки воспользуйтесь инструкцией в документации Docker.
Для проверки установленной версии Docker запустите команду docker --version на linux-машине.
Для установки RabbitMQ cluster для Docker воспользуйтесь инструкцией на GitHub.
Для установки RabbitMQ cluster без Docker воспользуйтесь инструкцией в документации RabbitMQ.
1.Установите ElasticSearch версии 5.6.8. Для установки воспользуйтесь инструкцией в документации ElasticSearch.
2.После установки ElasticSearch установите плагин для поиска по морфологии. Для этого скачайте актуальную версию плагина Morphological Analysis Plugin for ElasticSearch по ссылке. Инструкция по установке плагина морфологи доступна в документации ElasticSearch.
3.Для установки плагина добавьте в docker-файл ElasticSearch команду:
RUN bin/elasticsearch-plugin install http://dl.bintray.com/content/imotov/elasticsearch-plugins/org/elasticsearch/elasticsearch-analysis-morphology/5.6.8/elasticsearch-analysis-morphology-5.6.8.zip
Для установки MySQL cluster для Docker воспользуйтесь инструкцией в документации Docker.
Для установки MySQL cluster без Docker воспользуйтесь инструкцией в документации MySQL.
Настройка переменных контейнеров
Все контейнеры компонентов глобального поиска конфигурируются из файла с переменными среды (environment variables). Переменные содержатся в файле Docker/linux/onsite-custom-env. Установите значения переменных, отредактировав этот файл.
Важно
При обновлении версии сервиса глобального поиска необходимо в файле Docker/linux/onsite-custom-env установить значение “1” для переменных CLEAR_ELASTICSEARCH_DATA, CLEAR_RABBITMQ_DATA, CLEAR_MYSQL_DATA.
Название переменной | Описание | Значение по умолчанию |
---|---|---|
GS_WORKER_DB_CONNECTION_STRING_PATTERN (для MS SQL) | Шаблон подключения к базе данных Creatio. Укажите пользователя [DBLogin], пароль [DBPassword], сервер базы данных Creatio [DBServerName] (например, dbserver\\mssql2016) и имя базы данных Creatio [DBName]. Так как контейнеры запущены под управлением операционной системы Linux, то Windows-авторизация не поддерживается. Для авторизации необходимо создать sql-пользователя или использовать существующего. При создании пароля для данного пользователя не используйте символы “$”, “@” и “#”. | Server=[DBServerName]; Database=[DBName]; User Id=[DBLogin]; Password=[DBPassword]; Connection Timeout=10 |
GS_WORKER_DB_CONNECTION_STRING_PATTERN (для Oracle)
| Шаблон подключения к базе данных Creatio. Для приложений Creatio, использующих БД Oracle, необходимо изменить переменную GS_WORKER_DB_CONNECTION_STRING_PATTERN в файле Docker/linux/onsite-custom-env. | Пример значения переменной можно найти в файле Docker/linux/oracle-env. |
GS_WORKER_DB_CONNECTION_STRING_PATTERN (для PostgreSQL) | Шаблон подключения к базе данных Creatio. Для приложений Creatio, использующих БД PostgreSQL, необходимо изменить переменную GS_WORKER_DB_CONNECTION_STRING_PATTERN вфайле Docker/linux/onsite-custom-env. | Пример значения переменной можно найти в файле Docker/linux/postgre-env. |
GS_ES_URL | Внутренний хост ElasticSearch. Для приложений, у которых компоненты глобального поиска развернуты на разных серверах, необходимо указать хост, по которому будет доступен ElasticSearch. Для демонстрационных приложений, у которых все компоненты глобального поиска развернуты на одном сервере ((RUN_ELASTICSEARCH=1), внутренний хост доступен в docker контейнерах gs-web-api и gs-worker-xx. | http://elasticsearch:9200 |
GS_PUBLIC_ES_URL | Внешний хост elasticsearch, который используется для доступа из Creatio. Если ElasticSearch развернут в docker контейнере (RUN_ELASTICSEARCH=1) — укажите внешний хост, или ip-адрес машины, на которой развернут Docker. | http://[external.elasticSearchHostName]:9200 |
RUN_RABBITMQ | При установленном значении “1” будет запускаться контейнер с RabbitMQ. Если контейнер с RabbitMQ запускать не требуется, то установите “0”. | 1 |
RUN_ELASTICSEARCH | При установленном значении “1” будет запускаться контейнер с ElasticSearch. Если контейнер с ElasticSearch запускать не требуется, то установите “0”. | 1 |
RUN_MYSQL | При установленном значении “1” будет запускаться контейнер с MySQL. Если контейнер с MySQL запускать не требуется, то установите “0”. | 1 |
RUN_REDIS | При установленном значении “1” будет запускаться контейнер с REDIS. Если у вас уже развернут REDIS на внешнем сервере, то установите “0”. | 1 |
Установите значения перечисленных ниже параметров, только если компоненты RabbitMQ, ElasticSearch или MySQL развернуты отдельно.
Параметр | Описание |
---|---|
GS_ES_LOGIN | Если ElasticSearch без base64 авторизации, то оставьте параметр незаполненным. |
GS_ES_PASSWORD | Если ElasticSearch без base64 авторизации, то оставьте параметр незаполненным. |
GS_RABBITMQ_AMQP | Доступ к внешнему RabbitMQ. Параметр необходимо изменить, если компонент RabbitMq развернут отдельно. |
GS_DB_CONNECTION_STRING | Строка подключения к MySQL. Измените этот параметр в файле Docker/linux/mysql-env, если компонент MySQL развернут отдельно: •server=gs-mysql — хост; •ser id=$MYSQL_USER — пользователь; •pwd=$MYSQL_PASSWORD — пароль. |
GS_REDIS_CONNECTION_STRING | Доступ к внешнему REDIS. Параметр необходимо изменить, если компонент REDIS развернут отдельно. |
Дополнительные переменные, которые управляют параметрами индексации данных в ElasticSearch
Название переменной | Описание | Значение по умолчанию |
---|---|---|
GS_DB_BATCH_SIZE | Количество записей, формирующих одну пачку для bulk-запроса индексации на ElasticSearch. | 2000 записей |
GS_DB_INCREMENT_DAYS | Количество дней, которое необходимо проиндексировать за одну итерацию планировщика. Для сравнения используются данные колонки ModifiedOn записей системы. | 500 дней |
GS_DB_FILL_QUEUE_INTERVAL | Интервал сбора данных из БД Creatio регулярным планировщиком. Чем меньше этот параметр, тем выше нагрузка на БД Creatio, но быстрее происходит первичная индексация. | 30000 (указывается в миллисекундах) |
Запуск контейнеров с компонентами Global Search Service
Важно
Для корректной работы контейнеров необходимо, чтобы UTC-время на linux-машине, на которой установлен Docker, соответствовало UTC-времени на сервере БД Creatio. Допустимое отклонение — до пяти минут. Иначе глобальный поиск может индексировать не все записи.
1.Скопируйте папку Docker из дистрибутива на linux-машину.
2.Запустите команду.
•Для приложений Creatio, развернутых на MS SQL:
sh Docker/linux/run.sh mysql mssql 1.7.0 onsite
•Для приложений Creatio, развернутых на Oracle:
sh Docker/linux/run.sh mysql oracle 1.7.0 onsite
•Для приложений Creatio, развернутых на PostgreSQL:
sh Docker/linux/run.sh mysql postgre 1.7.0 onsite
На заметку
После повторного запуска команды sh Docker/linux/run.sh вы можете получить сообщение об ошибке, например “Error response from daemon: network with name net1 already exists”. Это сообщение появляется, так как docker network с именем net1 был создан при первом запуске команды.
После успешного запуска контейнеров будут автоматически смонтированы следующие Docker тома (volumes):
•es1, если RUN_ELASTICSEARCH=1 (es-node1);
•es2, если RUN_ELASTICSEARCH=1 (es-node2);
•mysql, если RUN_MYSQL=1;
•rabbitmq, если RUN_RABBITMQ=1.
На заметку
Информацию о созданных томах выводит команда docker volume list.
При прекращении работы одного из контейнеров (MySQL, RabbitMQ или ElasticSearch) данные будут сохраняться на внешнем диске вне docker-контейнера. Детальная информация о томах доступна в документации Docker.
Проверка удачного запуска контейнеров
Для просмотра всех запущенных контейнеров введите в консоль команду docker ps -a.
Должны быть запущены следующие контейнеры:
•gs-web-api;
•gs-web-indexing-service;
•gs-scheduler;
•gs-worker:
•gs-worker1;
•gs-worker2;
•gs-worker3;
•gs-worker-replay;
•gs-worker-single;
•gs-worker-single-replay;
•gs-worker-single-task;
•gs-worker-querried-single-task;
•ES, если RUN_ELASTICSEARCH = 1:
•es-node1;
•es-node2;
•rabbitmq, если RUN_RABBITMQ = 1;
•gs-mysql, если RUN_MYSQL = 1;
•gs-redis если RUN_REDIS=1.
Логирование
По умолчанию логирование происходит во время выполнения команды “stdout” контейнеров.
На заметку
docker logs --tail 100 gs-worker-01 выводит 100 последних строк логов из контейнера gs-worker.
На заметку
При первом запуске компонентов глобального поиска в их логах может появиться сообщение о том, что невозможно подключиться к mysql или rabbitmq. При старте возможны ситуации, когда контейнер mysql или rabbitmq временно недоступен. В этом случае продолжайте попытки подключения, пока в stdout не отобразится сообщение об удачном подключении и запуске контейнера: “Now listening on: http://[::]:80 Application started. Press Ctrl+C to shut down”.
Подключение сервиса глобального поиска в Creatio
Действия на сервере
Для подключения глобального поиска к Creatio выполните следующие действия на сервере:
1.Для http-запросов установите утилиту curl.
apt-get install curl
2.Выполните API-операцию AddSite, указав:
•[site name] — название базы данных Creatio, например, SalesTeamENU;
•[gs-web-api] — внешний адрес запущенного ранее контейнера gs-web-api.
curl -v -X POST -d '{"ApiKey": "testKey", "SiteName": "[site name]"}' -H "Content-Type: application/json" http://[gs-web-api]:81/addsite
3.Выполните API-операцию AddSearch, указав:
•[site name] — название БД Creatio, например, SalesTeamENU;
•[gs-web-api] — внешний адрес запущенного ранее контейнера gs-web-api.
•[default.json] — шаблон поиска по умолчанию. Описание других доступных шаблонов поиска приведено в таблице ниже.
curl -v -X POST -d '{"ApiKey": "testKey", "SiteName": "[site name]", "TemplateName": "default.json"}' -H "Content-Type: application/json" http://gs-web-api:81/addsearch
На заметку
Приведенный запрос вернет URL к созданному индексу в ElasticSearch. URL нужно сохранить и использовать в приведенном ниже sql-скрипте установки системных настроек.
Важно
Чтобы изменить шаблон поиска, выполните действия DeleteSearch и 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”, “GlobalSearchConfigServiceURL” и “GlobalSearchIndexingApiUrl” выполните следующий скрипт:
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://gsweb-api:81]
WHERE SysSettingsId = (SELECT TOP 1 Id FROM SysSettings WHERE Code ='GlobalSearchConfigServiceUrl')
UPDATE SysSettingsValue
SET TextValue = [укажите URL к Global Search Indexing Service, строка типа: http://gs-web-indexing-service: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”, “GlobalSearchConfigServiceURL” и “GlobalSearchIndexingApiUrl” выполните следующий скрипт:
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://gs-web-api:81]';
IND_API_URL VARCHAR(500) := '[укажите URL к Global Search Indexing Service, строка следующего типа: http://gs-web-indexing-service: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”, “GlobalSearchConfigServiceURL” и “GlobalSearchIndexingApiUrl” выполните следующий скрипт:
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://gs-web-api:81]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchConfigServiceUrl' LIMIT 1 );
UPDATE "SysSettingsValue"
SET "TextValue" = [укажите URL к Global Search Indexing Service, строка, сл. типа - http://gs-web-indexing-service:82]
WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchIndexingApiUrl' LIMIT 1 );
3.Перезапустите приложение Creatio, очистите redis и выполните вход в приложение.
База данных наполняется системными записями при первом запуске сервиса глобального поиска. До этого не существует даже файла базы данных, поскольку БД является автогенерируемой.
Смотрите также
•Часто задаваемые вопросы по глобальному поиску и дедупликации