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

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

Сервис глобального поиска (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-service

9200

83

Входящий порт настраивается переменной SEARCH_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 

Для развертывания компонентов глобального поиска необходимо установить 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. Распакуйте в открытую папку архив с установочными файлами.

    docker-compose up -d

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

  3. После выполнения команды проверьте, что в логах нет ошибок. Для этого выполните команду

    docker logs es-01

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

Все контейнеры компонентов глобального поиска конфигурируются из файла с переменными среды (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.json

ngram_2.json

ngram_3.json

without_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 и выполните вход в приложение.