Creatio administration
Это документация Creatio версии 7.15.0. Мы рекомендуем использовать новую версию документации.

Настройка массового поиска дублей

Сервис массового поиска дублей используется для дедупликации в разделах Creatio.

Важно

Для работы сервиса массового поиска дублей необходимо предварительно настроить сервис глобального поиска в ElasticSearch. Информацию о настройке читайте в статье “Настройка сервиса глобального поиска версии 2.0”.
Для настройки cервиса массового поиска дублей необходимы базовые знания администрирования docker-compose и ОС Linux.

Сервис глобального поиска дублей имеет собственную версионность. Данная инструкция универсальна для всех версий сервиса. Версии 1.0–1.5 совместимы с любой версией Creatio, в которой есть функциональность глобального поиска дублей. Версия сервиса 2.0 совместима с Creatio версии 7.15.4 и выше.

Рекомендуемые системные требования

Характеристика

Версия сервиса 1.0 - 1.5

Версия сервиса 2.0

Процессор

Pentium 4, Athlon 64 и выше с поддержкой SSE2

Pentium 4, Athlon 64 и выше с поддержкой SSE2

ОЗУ (RAM)

2 ГБ и выше

3 ГБ и выше

НЖМД (HDD)

20 ГБ и выше свободной памяти

30 Гб и выше свободной памяти

Компоненты сервиса массового поиска дублей

Для настройки сервиса необходимы:

1.Компоненты глобального поиска. Список приведен в статье “Настройка сервиса глобального поиска версии 2.0”.

2.Компоненты сервиса массового поиска дублей. Перечень компонентов приведен ниже.

Разворачивается на сервере 1:

Mongodb — документоориентированная система управления базами данных. Используется для сервиса массового поиска дублей версий 1.0–1.6.

Разворачиваются на сервере 2:

dd-web-api — web-сервис для общения в Creatio.

dd-data-service — внутренний сервис коммуникаций с mongdb.

dd-duplicates-search-worker — компонент поиска дублей.

dd-duplicates-deletion-worker — компонент, выполняющий точечное удаление дублей.

dd-duplicates-confirmation-worker — компонент, выполняющий группировку и фильтрацию найденных дублей с учетом уникальности.

dd-duplicates-cleaner — компонент очистки дублей.

dd-deduplication-task-worker — компонент постановки задачи дедупликации.

dd-deduplication-preparation-worker — компонент подготовки процесса дедупликации, формирует запросы для поиска дублей согласно правилам.

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

Шаги настройки сервиса массового поиска дублей

1.Развернуть и настроить глобальный поиск в Creatio. Подробнее >>>

2.Развернуть и настроить mongodb (только для сервиса версий 1.0–1.5). Подробнее >>>

3.Скачать, разархивировать и скопировать необходимые для настройки исходные файлы на машину с установленным ПО docker, docker-compose. Скачать файлы.

4.Настроить переменные окружения. Подробнее >>>

5.Запустить контейнеры. Подробнее >>>

6.Проверить успешность запуска контейнеров. Подробнее >>> 

7.Проверить логирование. Подробнее >>> 

8.Подключить функциональность массового поиска дублей в Creatio. Подробнее >>>

Развернуть и настроить mongodb (только для сервиса версий 1.0–1.5)

Инструкция по установке и настройке доступна на официальном сайте mongodb. Перейти на сайт.

Настроить переменные окружения

Переменные окружения содержатся в файле compose/.env. Установите значения переменных, отредактировав этот файл.

Название переменной

Описание

Значение по умолчанию

DEDUPLICATION_TAG

Тег контейнеров на

dockerhub.

1.0 — при использовании сервиса массового поиска дублей версии 1.0.

1.2 — при использовании сервиса массового поиска дублей версии 1.2.

1.3 — при использовании сервиса массового поиска дублей версии 1.3.

1.4 — при использовании сервиса массового поиска дублей версии 1.4.

1.5 — при использовании сервиса массового поиска дублей версии 1.5

2.0 — при использовании сервиса массового поиска дублей версии 2.0

ELASTICSEARCH_URI

Внешний путь к elasticsearch,

который был развернут на

шаге настройки глобального

поиска в Creatio.

http://user:password@external.

elasticsearch:9200/

WEB_API_PORT

Порт, на котором будет

доступен компонент web-api

сервиса массового поиска

дублей.

8086

REDIS_CACHE_OPTIONS_CONNECTION

_STRING

Внешний путь к redis,

который был развернут на

шаге настройки глобального

поиска в Creatio. Переменная используется при настройке сервиса версий 1.0–1.5.

external.redis:6379,defaultDat

abase=0,syncTimeout=5000

RABBITMQ_URI

Внешний путь к rabbitmq,

который был развернут на

шаге настройки глобального

поиска в Creatio. Переменная используется при настройке сервиса версий 1.0–1.5.

amqp://gs:gs@external.rebbitmq

:5672

MONGODB_CONNECTION_STRING

Внешний путь к mongodb. Переменная используется при настройке сервиса версий 1.0–1.5.

mongodb://dd:dd@external.mongo

db:27017?uuidRepresentation=Standard

Запустить контейнеры

Для запуска контейнеров необходимо выполнить команду:

cd compose # перейти в папку compose
docker-compose up -d

Проверить успешность запуска контейнеров

Для просмотра списка всех запущенных контейнеров необходимо в консоли выполнить команду:

docker ps --filter "label=service=dd" -a --format "table {{.Names}}\t{{.Ports}}\t{{.Status}}\t{{.RunningFor}}"

У всех запущенных контейнеров отобразится статус “Up”.

Проверить логирование

По умолчанию логирование происходит во время выполнения команды “stdout” контейнеров. Чтобы просмотреть последние 100 записей логов из контейнера dd-data-service, выполните команду:

docker logs --tail 100 dd-data-service

Подключить функциональность массового поиска дублей в Creatio

На стороне Creatio необходимо выполнить следующие шаги.

1.Установите значение системной настройки “Адрес сервиса дедупликации”. Подробнее >>>

2.Настройте права на системную операцию “Поиск дублей”. Подробнее >>>

3.Включите в Creatio функциональность массового поиска дублей. Обратите внимание, что данная настройка отличается для разных СУБД. Подробнее >>>

4.Перезапустите приложение Creatio. Подробнее >>>

Установите значение системной настройки “Адрес сервиса дедупликации”

В разделе [Системные настройки] найдите настройку “Адрес сервиса дедупликации” (DeduplicationWebApiUrl) и в ней укажите URL к dd-web-api, строка следующего типа: http://external.deduplication-web-api:8086.

Настройте права на системную операцию “Поиск дублей”

В разделе [Доступ к операциям] откройте системную операцию “Поиск дублей” (CanSearchDuplicates) и на детали [Доступ к операции] раздайте права необходимым пользователям/ролям, которые смогут выполнять поиск дублей.

Включите в Creatio функциональность массового поиска дублей

Для включения функциональности (Feature Toggle) массового поиска дублей (Deduplication, ESDeduplication, BulkESDeduplication) необходимо выполнить SQL-скрипт. Этот скрипт различается в зависимости от используемой СУБД — MS SQL, Oracle или Postgre SQL.

Для СУБД MS SQL

DECLARE @DeduplicationFeature NVARCHAR(50) = 'Deduplication';
DECLARE @DeduplicationFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @DeduplicationFeature);

DECLARE @ESDeduplicationFeature NVARCHAR(50) = 'ESDeduplication';
DECLARE @ESDeduplicationFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @ESDeduplicationFeature);

DECLARE @Bulk_ES_DD_Feature NVARCHAR(50) = 'BulkESDeduplication';
DECLARE @Bulk_ES_DD_FeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id
FROM Feature WHERE Code =@Bulk_ES_DD_Feature);

DECLARE @allEmployeesId UNIQUEIDENTIFIER = 'A29A3BA5-4B0D-DE11-9A51-005056C00008';
IF (@DeduplicationFeatureId IS NOT NULL)
BEGIN
      IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @DeduplicationFeatureId)
       UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId =@DeduplicationFeatureId
      ELSE
       INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1',
@DeduplicationFeatureId)
END
ELSE
BEGIN
      SET @DeduplicationFeatureId = NEWID()
      INSERT INTO Feature (Id, Name, Code) VALUES
(@DeduplicationFeatureId, @DeduplicationFeature, @DeduplicationFeature)
       INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @DeduplicationFeatureId)
END

IF (@ESDeduplicationFeatureId IS NOT NULL)
BEGIN
      IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @ESDeduplicationFeatureId)
     UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @ESDeduplicationFeatureId
      ELSE
       INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @ESDeduplicationFeatureId)
END
ELSE
BEGIN
      SET @ESDeduplicationFeatureId = NEWID()
      INSERT INTO Feature (Id, Name, Code) VALUES (@ESDeduplicationFeatureId, @ESDeduplicationFeature, @ESDeduplicationFeature)
      INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @ESDeduplicationFeatureId)
END

IF (@Bulk_ES_DD_FeatureId IS NOT NULL)
BEGIN
      IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @Bulk_ES_DD_FeatureId)
       UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId =@Bulk_ES_DD_FeatureId
      ELSE
       INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState,FeatureId) VALUES (@allEmployeesId, '1', @Bulk_ES_DD_FeatureId)
END
ELSE
BEGIN
      SET @Bulk_ES_DD_FeatureId = NEWID()
      INSERT INTO Feature (Id, Name, Code) VALUES (@Bulk_ES_DD_FeatureId, @Bulk_ES_DD_Feature, @Bulk_ES_DD_Feature)
      INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @Bulk_ES_DD_FeatureId)
END

Для СУБД Oracle

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
      DeduplicationFeature VARCHAR(50) := 'Deduplication';
      DeduplicationFeatureId VARCHAR(38) := NULL;
      DeduplicationFeatureId_GUID VARCHAR(38) := generate_uuid();
      ESDeduplicationFeature VARCHAR(50) := 'ESDeduplication';
      ESDeduplicationFeatureId VARCHAR(38) := NULL;
      ESDeduplicationFeatureId_GUID VARCHAR(38) := generate_uuid();
      BulkESDeduplicationFeature VARCHAR(50) := 'BulkESDeduplication';
      BulkESDeduplicationFeatureId VARCHAR(38) := NULL;
      Bulk_ES_DD_GUID VARCHAR(38) := generate_uuid();
      allEmployeesId VARCHAR(38) := '{7F3B869F-34F3-4F20-AB4D-7480A5FDF647}';
      State_Deduplication VARCHAR(1) := NULL;
      State_ESDeduplication VARCHAR(1) := NULL;
      State_BulkESDeduplication VARCHAR(1) := NULL;
BEGIN
      SELECT MAX("Id") INTO DeduplicationFeatureId FROM "Feature" WHERE "Code" = DeduplicationFeature AND rownum = 1;
      SELECT MAX("Id") INTO ESDeduplicationFeatureId FROM "Feature" WHERE "Code" = ESDeduplicationFeature AND rownum = 1;
      SELECT MAX("Id") INTO BulkESDeduplicationFeatureId FROM "Feature" WHERE "Code" = BulkESDeduplicationFeature AND rownum = 1;
      SELECT MAX("FeatureState") INTO State_Deduplication FROM "AdminUnitFeatureState" WHERE "FeatureId" = DeduplicationFeatureId AND rownum = 1;
      SELECT MAX("FeatureState") INTO State_ESDeduplication FROM "AdminUnitFeatureState" WHERE "FeatureId" = BulkESDeduplicationFeatureId AND rownum = 1;
      SELECT MAX("FeatureState") INTO State_BulkESDeduplication FROM "AdminUnitFeatureState" WHERE "FeatureId" = BulkESDeduplicationFeatureId AND rownum =1;
      IF (DeduplicationFeatureId IS NULL) THEN
       INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (DeduplicationFeatureId_GUID, DeduplicationFeature, DeduplicationFeature);
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', DeduplicationFeatureId_GUID);
       ELSE
       IF (State_Deduplication IS NOT NULL) THEN
       UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = DeduplicationFeatureId;
       ELSE
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', DeduplicationFeatureId_GUID);
       END IF;
END IF;
IF (ESDeduplicationFeatureId IS NULL) THEN
       INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (ESDeduplicationFeatureId_GUID, ESDeduplicationFeature, ESDeduplicationFeature);
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', ESDeduplicationFeatureId_GUID);
       ELSE
       IF (State_ESDeduplication IS NOT NULL) THEN
       UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = ESDeduplicationFeatureId;
       ELSE
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', ESDeduplicationFeatureId_GUID);
       END IF;
END IF;
IF (BulkESDeduplicationFeatureId IS NULL) THEN
       INSERT INTO "Feature" ("Id", "Name", "Code") VALUES(Bulk_ES_DD_GUID, BulkESDeduplicationFeature, BulkESDeduplicationFeature);
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', Bulk_ES_DD_GUID);
       ELSE
       IF (State_BulkESDeduplication IS NOT NULL) THEN
       UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = BulkESDeduplicationFeatureId;

       ELSE
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', Bulk_ES_DD_GUID);
       END IF;
      END IF;
END;

Для СУБД PostgreSQL

DO $$
DECLARE
         DeduplicationFeature VARCHAR(50) := 'Deduplication';
         DeduplicationFeatureId uuid;

         ESDeduplicationFeature VARCHAR(50) := 'ESDeduplication';
         ESDeduplicationFeatureId uuid;

         Bulk_ES_DD_Feature VARCHAR(50) := 'BulkESDeduplication';
         Bulk_ES_DD_FeatureId uuid;

       allEmployeesId uuid := 'A29A3BA5-4B0D-DE11-9A51-005056C00008';

BEGIN

         SELECT "Id" INTO DeduplicationFeatureId FROM "Feature"
         WHERE "Code" = DeduplicationFeature
         LIMIT 1;
         IF (DeduplicationFeatureId IS NOT NULL)
            THEN
               IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = DeduplicationFeatureId) THEN
                  UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = DeduplicationFeatureId;
               ELSE
                  INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', DeduplicationFeatureId);
               END IF;
         ELSE
            DeduplicationFeatureId := uuid_generate_v4();
            INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (DeduplicationFeatureId, DeduplicationFeature, DeduplicationFeature);
            INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', DeduplicationFeatureId);
         END IF;

         SELECT "Id" INTO ESDeduplicationFeatureId FROM "Feature"
         WHERE "Code" = ESDeduplicationFeature
         LIMIT 1;
         IF (ESDeduplicationFeatureId IS NOT NULL)
            THEN
               IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = ESDeduplicationFeatureId) THEN
                  UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = ESDeduplicationFeatureId;
               ELSE
                  INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', ESDeduplicationFeatureId);
               END IF;
            ELSE
               ESDeduplicationFeatureId := uuid_generate_v4()
               INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (ESDeduplicationFeatureId, ESDeduplicationFeature, ESDeduplicationFeature);
               INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1',ESDeduplicationFeatureId);
            END IF;

         SELECT "Id" INTO Bulk_ES_DD_FeatureId FROM "Feature"
         WHERE "Code" = Bulk_ES_DD_Feature
         LIMIT 1;
         IF (Bulk_ES_DD_FeatureId IS NOT NULL
            THEN
               IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = Bulk_ES_DD_FeatureId) THEN
                  UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = Bulk_ES_DD_FeatureId;
               ELSE
                  INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', Bulk_ES_DD_FeatureId);
               END IF;
         ELSE
            Bulk_ES_DD_FeatureId := uuid_generate_v4();
            INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (Bulk_ES_DD_FeatureId, Bulk_ES_DD_Feature, Bulk_ES_DD_Feature);
            INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', Bulk_ES_DD_FeatureId);
         END IF;
END $$;

Перезапустите приложение Creatio

Очистите redis, перезапустите приложение Creatio и выполните вход в приложение.

Рекомендуемые работы по обслуживанию сервиса

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

Смотрите также

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

Поиск и объединение дублей

Был ли данный материал полезен?

Как можно улучшить эту статью?