Настроить глобальный поиск

Продукты
Все продукты

Сервис глобального поиска (Global Search Service) создан для интеграции ElasticSearch c Creatio и выполняет следующие функции:

  • Регистрирующую:
    • Подписывает клиента, создавая индекс в ElasticSearch и сохраняет связь индекс-приложение.
    • Отключает клиента, по требованию удаляя индекс в ElasticSearch.
  • Транспортную:
    • Участвует в процессе индексации — забирает данные из базы данных.

Последовательность действий при настройке глобального поиска зависит от того, какую версию сервиса вы будете использовать. Для последней версии Creatio рекомендуется всегда использовать новейшую версию сервиса глобального поиска.

Развертывание компонентов глобального поиска версии 3.0 можно выполнять с использованием оркестратора Kubernetes и пакетного менеджера Helm или Docker.

Для поддержания работоспособности сервиса и возможности быстрого восстановления данных после отказа, например, в случае перебоев с электроэнергией, рекомендуется раз в сутки выполнять резервное копирование Elasticsearch.

Если у вас возникнут вопросы в ходе настройки, то рекомендуем ознакомиться со статьей Часто задаваемые вопросы по глобальному поиску и дедупликации.

Настроить сервис глобального поиска с использованием Kubernetes 

Для настройки сервиса скачайте исходные файлы. Скачать файлы.

Чтобы установить сервис:

  1. Настройте целевое окружение:
    1. Кластер Kubernetes. Подробно о том, как настроить и администрировать кластер, читайте в документации Kubernetes.
    2. Пакетный менеджер Helm. Установка пакетного менеджера подробно описана в документации Helm.
  2. Из архива с исходными файлами извлеките файл values-onsite.yaml и сохраните его в ту же папку, где находится архив.
  3. Откройте извлеченный файл. Основные параметры, которые используются в файле, описаны в таблице ниже.
  4. Укажите в значении переменной global.searchService.url публичный адрес сервиса в формате http://k8s-node:30332.
  5. Если у вас еще не установлены Redis, RabbitMQ, ElasticSearch и служебная база данных PostgreSQL, то переходите к следующему шагу.

    Если эти сервисы были установлены ранее, например, при настройке других контейнерных компонентов, то необходимо в исходном файле сервиса глобального поиска values-onsite.yaml отключить их установку и настроить подключение к существующим сервисам.

    На заметку. Для высоконагруженых сред рекомендуется разворачивать ElasticSearch в кластере. Подробнее читайте в документации ElasticSearch (на английском) .

    • Для Redis:
      1. Отключите установку сервиса. Для этого в секции redis файла values-onsite.yaml установите значение enabled: false.

        redis:
                                              enabled: false
                                            
      2. Настройте подключение к ранее установленному Redis. Для этого в секции global.redis файла values-onsite.yaml укажите параметры подключения.

        global:
                                              redis:
                                                host: [host]
                                                port: [port]
                                                database: [database]
                                            

        Где

        [host] — адрес сервера Redis;

        [port] — порт подключения к Redis-серверу;

        [database] — имя базы данных Redis.

    • Для RabbitMQ:
      1. Отключите установку сервиса. Для этого в секции rabbitmq файла values-onsite.yaml установите значение enabled: false.

        rabbitmq:
                                              enabled: false
                                            
      2. Настройте подключение к ранее установленному RabbitMQ. Для этого в секции global.rabbitmq файла values-onsite.yaml укажите параметры подключения.

        global:
                                              rabbitmq:
                                                host: [host]
                                                vhost: [vhost]
                                                port: [port]
                                                user: [user]
                                                password: [password]
                                            

        Где

        [host] — адрес сервиса RabbitMQ;

        [vhost] — адрес virtual host сервиса RabbitMQ;

        [port] — порт для amqp подключения к RabbitMQ;

        [user] — пользователь RabbitMQ;

        [password] — пароль пользователя RabbitMQ.

    • Для служебной базы данных PostgreSQL:
      1. Отключите установку PostgreSQL. Для этого в секции postgresql файла values-onsite.yaml установите значение enabled: false.

        postgresql:
                                              enabled: false
                                            
      2. Настройте подключение к служебной базе данных PostgreSQL. Для этого в секции global.postgresql файла values-onsite.yaml укажите параметры подключения.

        global:
                                              db:
                                                user: [user]
                                                password: [password]
                                                database: [database]
                                                host: [host]
                                                port: [port]
                                            

        Где

        [user] — пользователь PostgreSQL, под которым выполняется подключение к базе данных;

        [password] — пароль пользователя PostgreSQL;

        [database] — служебная база данных PostgreSQL;

        [host] — адрес базы данных PostgreSQL;

        [port] — порт для подключения к базе данных.

    • Для ElasticSearch:
      1. Отключите установку ElasticSearch. Для этого в секции elasticsearch файла values-onsite.yaml установите значение enabled: false.

        elasticsearch:
                                              enabled: false
                                            
      2. Настройте подключение к ранее установленному ElasticSearch. Для этого в секции global.elasticsearch файла values-onsite.yaml укажите параметры подключения.

        global:
                                              elasticsearch:
                                                url: [url]
                                                user: [user]
                                                password: [password] 
                                            

        Где

        [user] — пользователь ElasticSearch;

        [password] — пароль пользователя ElasticSearch;

        [url] — адрес сервиса ElasticSearch в формате http://elasticsearch:9200.

  6. Выполните команду helm install gs -f values-onsite.yaml globalsearch.tgz. В результате будет выполнена установка сервиса глобального поиска вместе со всеми выбранными зависимостями.

    На заметку. По умолчанию сервисы разворачиваются с типом NodePort.

Основные параметры сервиса глобального поиска, которые используются в файле values.yaml.

ПараметрОписание параметра
scheduler.env.fillQueueIntervalПериодичность запуска первичной индексации, в миллисекундах.
worker.env.indexingCommandTimeoutТаймаут запроса в БД Creatio при первичной индексации, в секундах.
workerSingle.env.indexingCommandTimeoutТаймаут запроса в БД Creatio при мгновенной индексации, в секундах.
global.incrementDaysКоличество дней, за которые будут индексироваться измененные записи в рамках одной итерации первичной индексации. Влияет на скорость индексации и нагрузку на БД Creatio. Чем больше значение, тем быстрее индексация и больше нагрузка. Чем меньше значение, тем дольше индексация и меньше нагрузка.
log4NetНастройки логирования.
global.indexingContentLengthМаксимальная длинна текстовых полей при индексации.
global.elasticsearchПараметры подключения к ElasticSearch.
global.searchServiceПубличный адрес к search-service, в формате http://k8s-node:30332.
global.rabbitmqНастройки подключения к RabbitMQ.
global.dbНастройки подключения к внутренней сервисной базе данных сервиса глобального поиска.
global.redisНастройки подключения к Redis.

Настроить сервис глобального поиска в Docker 

Для настройки глобального поиска необходимы два отдельных физических или виртуальных сервера (“сервер 1” и “сервер 2”) с установленной ОС Linux. Для расчета требований к серверам воспользуйтесь калькулятором системных требований.

Важно. Для настройки глобального поиска необходимы базовые знания администрирования ПО Docker и ОС Linux.

С перечнем поддерживаемых ОС вы можете ознакомиться в документации Docker. В зависимости от потребностей вашей компании можно использовать Docker Community Edition (CE) или Enterprise Edition (EE). Подробную информацию вы найдете в документации Docker.

На заметку. Настройки ниже актуальны для сервиса глобального поиска версии 3.0. Если вам необходимо настроить сервис глобального поиска более ранней версии, то ознакомьтесь с описанием настроек в документации Creatio версии 7.16.

Чтобы обновить глобальный поиск с версии 2.0 на версию 3.0, необходимо удалить все docker volume версии 2.0 на серверах 1 и 2 при помощи команды docker-compose down -v и повторно выполнить установку и настройку всех сервисов.

Компоненты глобального поиска 

Развертывается на сервере 1:

Развертываются на сервере 2:

  • postgres — база данных конфигурирования компонентов глобального поиска.
  • rabbitmq — брокер сообщений.
  • redis — хранилище данных, используемое для кеширования и быстродействия.
  • gs-web-api — web-сервис конфигурирования компонентов глобального поиска.
  • gs-web-indexing-service — web-сервис для обработки запросов точечного индексирования данных из системы.
  • gs-search-service — web-сервис поиска данных, proxy для elasticsearch.
  • 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-search-service920083Входящий порт настраивается переменной SEARCH_SERVICE_PORT
gs-worker9200 Необходимо соединение с сервером, на котором расположен elasticsearch
gs-worker-single9200 Необходимо соединение с сервером, на котором расположен elasticsearch
elasticsearch 9200 

Последовательность действий для настройки глобального поиска 

  1. Установить Docker на физическую или виртуальную машину с операционной системой Linux.
  2. Установить Docker-Compose.
  3. Установить ElasticSearch.
  4. Настроить переменные контейнеров.
  5. Установить и запустить компоненты Global Search Service.
  6. Подключить функциональность глобального поиска в Creatio.

Установить Docker 

Для развертывания компонентов глобального поиска необходимо установить Docker на операционную систему Linux. Для установки воспользуйтесь инструкцией в документации Docker.

Для проверки установленной версии Docker запустите команду docker --version на linux-машине.

Установить Docker-Compose 

Для установки Docker-Compose воспользуйтесь инструкцией в документации Docker .

Установить ElasticSearch 

На заметку. В данной инструкции описано развертывание ElasticSearch в Docker-Compose. Вы также можете развернуть его как daemon OS, что позволит обойтись без предварительной установки Docker и Docker-Compose. Для этого воспользуйтесь инструкцией в документации ElasticSearch.

Для установки ElasticSearch:

  1. На сервере, выделенном для установки ElasticSearch (сервер 1), зайдите в папку /opt.
  2. Распакуйте в открытую папку архив с установочными файлами. 

    Команда может выполняться несколько минут.

Настроить переменные контейнеров 

Все контейнеры компонентов глобального поиска конфигурируются из файла с переменными среды (environment variables). Переменные содержатся в файле /opt/compose/services/.env. Установите значения переменных, отредактировав этот файл.

Название переменнойОписаниеЗначение по умолчанию
GS_ES_URLВнешний хост ElasticSearch, который используется для доступа из Creatio. Необходимо указать ip-адрес сервера, на котором развернут ElasticSearch.http://elasticsearch-publicip:9200
CURRENT_SERVER_IPВнешний ip-адрес сервера, на котором развернуты сервисы глобального поиска (сервер 2).10.0.0.1

На заметку. Чтобы проверить внешний ip-адрес сервера, выполните команду hostname -I | awk '{ print $1 }'

Дополнительные переменные, которые управляют параметрами индексации данных в 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 выполните следующие действия на сервере, где находятся компоненты глобального поиска (для сервиса, развернутоо в Docker, это сервер 2):

  1. Для http-запросов установите утилиту api-get install curl или yum install curl.

    apt-get install curl
  2. Выполните http-запрос на регистрацию сайта в глобальном поиске, указав:
    1. DATABASE_TYPE — тип базы данных Creatio (mssql, postgresql или oracle).
    2. DATABASE_CONNECTION_STRING — строка подключения к БД Creatio.
    3. SITE_NAME — название сайта Creatio, например, my-test-site.
    4. SERVER2_IP_ADDRESS (только для Docker) — IP-адрес Linux сервера, на котором развернуты компоненты глобального поиска.

      GS_WEB_API_URL (только для Kubernetes) — 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]*
                                      
      curl -v -X POST -d '{"databaseType": "[DATABASE_TYPE]", "databaseConnectionString": "[DATABASE_CONNECTION_STRING]"}' -H "Content-Type: application/json" http:// [ GS_WEB_API_URL ]/sites/[SITE_NAME]*
                                      

      Пример для MS SQL.

      Для Docker:

      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://[SERVER2_IP_ADDRESS]:81/sites/my-test-site

      Для Kubernetes:

      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_WEB_API_URL ] /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-запрос на подключение поиска к ранее добавленному сайту, указав:

    1. SITE_NAME — название сайта Creatio, например, my-test-site.
    2. TEMPLATE_NAME — название шаблона поиска, который используется в ElasticSearch. Перечень доступных к использованию шаблонов приведен в таблице ниже.
    3. SERVER2_IP_ADDRESS (только для Docker) — IP-адрес Linux сервера, на котором развернуты компоненты глобального поиска.

      GS_WEB_API_URL (только для Kubernetes) — 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": "[TEMPLATE_NAME]"}' -H "Content-Type: application/json" http:// [ GS_WEB_API_URL ] /sites/[SITE_NAME]/search
                                      

      Пример.

      Для Docker:

      curl -v -X POST -d '{"templateName": "default.json"}' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/sites/my-test-site/search

      Для Kubernetes:

      curl -v -X POST -d '{"templateName": "default.json"}' -H "Content-Type: application/json" http:// [GS_WEB_API_URL] /sites/my-test-site/search

    На заметку. Приведенный запрос вернет URL к созданному индексу в ElasticSearch. URL нужно сохранить и использовать в приведенном ниже sql-скрипте установки системных настроек.

Важно. Чтобы изменить шаблон поиска, выполните DELETE запрос на /sites/{siteName}/search и http-запрос на подключение поиска, описанный выше, после чего будет выполнена полная переиндексация сайта.

Все доступные шаблоны поиска и их характеристики приведены в таблице ниже:

 Старый шаблон (версия 1.6)default.jsonngram_2.jsonngram_3.jsonwithout_ngram.json
Поиск по части слова+++
Поиск по слову с опечатками+++
Поиск по части номера телефона в средствах связи++++
Нечеткий поиск по средствам связи++++
Поиск с перестановкой слов+++++
Поиск по точному совпадению+++++
Поиск по двум символам+
Примерная скорость поиска (чем меньше, тем лучше) 13х<1х
Размер индекса на elasticsearch (чем меньше, тем лучше) 2,5х<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. Установите значения системных настроек:
    1. “GlobalSearchUrl” — полный путь в elasticsearch с учетом индекса. Значение настройки возвращается при выполнении запроса на web-api для добавления поиска для сайта.

      Пример строки для Docker: http://[SERVER2_IP_ADDRESS]:83/indexname.

      Пример строки для Kubernetes: http://[GS-SEARCH-SERVICE_URL] /indexname.

    2. GlobalSearchConfigServiceURL” — ссылка на API глобального поиска.

      Значение по умолчанию для Docker: http://[SERVER2_IP_ADDRESS]:81.

      Значение по умолчанию для Kubernetes: http:// [GS_WEB_API_URL].

    3. “GlobalSearchIndexingApiUrl” — ссылка на сервис моментальной индексации.

      Значение по умолчанию для Docker: http://[SERVER2_IP_ADDRESS]:82.

      Значение по умолчанию для Kubernetes: http://[GS-WEB-INDEXING-SERVICE_URL].

       

      		
                                      UPDATE SysSettingsValue
                                      SET TextValue = [укажите URL к индексу ElasticSearch, строка типа: http://[SERVER2_IP_ADDRESS]:83/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')
      UPDATE SysSettingsValue 
                                      SET TextValue = [укажите URL к индексу ElasticSearch, строка типа: http://[GS-SEARCH-SERVICE_URL]/indexname] 
                                      WHERE SysSettingsId = (SELECT TOP 1 Id FROM SysSettings WHERE Code ='GlobalSearchUrl') 
                                       
                                      UPDATE SysSettingsValue 
                                      SET TextValue = [укажите URL к Global Search Service, строка типа: http:// GS_WEB_API_URL] 
                                      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_URL] 
                                      WHERE SysSettingsId = (SELECT TOP 1 Id FROM SysSettings WHERE Code ='GlobalSearchIndexingApiUrl') 
                                      
  3. Перезапустите приложение Creatio, очистите redis и выполните вход в приложение.

Действия на стороне Creatio для СУБД 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', GlobalSearchV2FeatureId_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. Установите значения системных настроек:

    Для этого выполните следующий скрипт:

    1. “GlobalSearchUrl” — полный путь в elasticsearch с учетом индекса. Значение настройки возвращается при выполнении запроса на web-api для добавления поиска для сайта.

      Пример строки для Docker: http://[SERVER2_IP_ADDRESS]:83/indexname.

      Пример строки для Kubernetes: http://[GS-SEARCH-SERVICE_URL] /indexname

    2. GlobalSearchConfigServiceURL” — ссылка на API глобального поиска.

      Значение по умолчанию для Docker: http://[SERVER2_IP_ADDRESS]:81.

      Значение по умолчанию для Kubernetes: http:// [GS_WEB_API_URL].

    3. “GlobalSearchIndexingApiUrl” — ссылка на сервис моментальной индексации.

      Значение по умолчанию для Docker: http://[SERVER2_IP_ADDRESS]:82.

      Значение по умолчанию для Kubernetes: http://[GS-WEB-INDEXING-SERVICE_URL].

    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://[SERVER2_IP_ADDRESS]:83/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;
    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://[GS-SEARCH-SERVICE_URL]/indexname]'; 
                             CONFIG_URL VARCHAR(500) := '[укажите URL к Global Search Service, строка следующего типа: http:// GS_WEB_API_URL]'; 
                             IND_API_URL VARCHAR(500) := '[укажите URL к Global Search Indexing Service, строка следующего типа: http:// GS-WEB-INDEXING-SERVICE_URL]'; 
                            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 и выполните вход в приложение.

Действия на стороне Creatio для СУБД 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. Установите значения системных настроек:

    1. “GlobalSearchUrl” — полный путь в elasticsearch с учетом индекса. Значение настройки возвращается при выполнении запроса на web-api для добавления поиска для сайта.

      Пример строки для Docker: http://[SERVER2_IP_ADDRESS]:83/indexname.

      Пример строки для Kubernetes: http://[GS-SEARCH-SERVICE_URL] /indexname.

    2. GlobalSearchConfigServiceURL” — ссылка на API глобального поиска.

      Значение по умолчанию для Docker: http://[SERVER2_IP_ADDRESS]:81.

      Значение по умолчанию для Kubernetes: http:// [GS_WEB_API_URL].

    3. “GlobalSearchIndexingApiUrl” — ссылка на сервис моментальной индексации.

      Значение по умолчанию для Docker: http://[SERVER2_IP_ADDRESS]:82.

      Значение по умолчанию для Kubernetes: http://[GS-WEB-INDEXING-SERVICE_URL].

    Для этого выполните следующий скрипт:

    UPDATE "SysSettingsValue"
                            SET "TextValue" = [укажите URL к индексу ElasticSearch, строка следующего типа: http://[SERVER2_IP_ADDRESS]:83/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 );
    UPDATE "SysSettingsValue" 
                            SET "TextValue" = [укажите URL к индексу ElasticSearch, строка следующего типа: http://[GS-SEARCH-SERVICE_URL /indexname] 
                            WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchUrl' LIMIT 1 ); 
                             
                            UPDATE "SysSettingsValue" 
                            SET "TextValue" = [укажите URL к Global Search Service, строка следующего типа: http:// [GS_WEB_API_URL ] 
                            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_URL] 
                            WHERE "SysSettingsId" = (SELECT "Id" FROM "SysSettings" WHERE "Code" = 'GlobalSearchIndexingApiUrl' LIMIT 1 ); 	
                            	
  3. Перезапустите приложение Creatio, очистите redis и выполните вход в приложение.