Настройка массового поиска дублей
Сервис массового поиска дублей используется для дедупликации в разделах bpm’online.
Важно
Для работы сервиса массового поиска дублей необходимо предварительно настроить сервис глобального поиска в ElasticSearch. Информацию о настройке читайте в статье “Настройка сервиса глобального поиска версии 1.6”.
Для настройки cервиса массового поиска дублей необходимы базовые знания администрирования docker-compose и ОС Linux.
Для обеспечения работы сервиса массового поиска дублей целесообразно внедрить контейнерную виртуализацию, системные требования к которой приведены в статье “Требования к контейнерной виртуализации”.
Компоненты сервиса массового поиска дублей
Для настройки сервиса необходимы:
1.Компоненты глобального поиска. Список приведен в статье “Настройка сервиса глобального поиска версии 1.6”.
2.Компоненты сервиса массового поиска дублей. Перечень компонентов приведен ниже.
Разворачивается на отдельном сервере:
Mongodb — документоориентированная система управления базами данных.
Разворачиваются на одном сервере:
dd-web-api — web-сервис для общения в bpm’online.
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.Развернуть и настроить глобальный поиск в bpm’online. Подробнее >>>
2.Развернуть и настроить mongodb. Подробнее >>>
3.Скачать, разархивировать и скопировать необходимые для настройки исходные файлы на машину с установленным ПО docker, docker-compose. Скачать файлы.
4.Настроить переменные окружения. Подробнее >>>
5.Запустить контейнеры. Подробнее >>>
6.Подключить функциональность массового поиска дублей в bpm’online. Подробнее >>>
Развернуть и настроить mongodb
Инструкция по установке и настройке доступна на официальном сайте mongodb. Перейти на сайт.
Настроить переменные окружения
Переменные окружения содержатся в файле compose/.env. Установите значения переменных, отредактировав этот файл.
Название переменной | Описание | Значение по умолчанию |
DEDUPLICATION_TAG | Тег контейнеров на dockerhub. | 1.0 |
ELASTICSEARCH_URI | Внешний путь к elasticsearch, который был развернут на шаге настройки глобального поиска в bpm’online. | http://user:password@external. elasticsearch:9200/ |
WEB_API_PORT | Порт, на котором будет доступен компонент web-api сервиса массового поиска дублей. | 8086 |
REDIS_CACHE_OPTIONS_CONNECTION _STRING | Внешний путь к redis, который был развернут на шаге настройки глобального поиска в bpm’online. | external.redis:6379,defaultDat abase=0,syncTimeout=5000 |
RABBITMQ_URI | Внешний путь к rabbitmq, который был развернут на шаге настройки глобального поиска в bpm’online. | amqp://gs:gs@external.rebbitmq :5672 |
MONGODB_CONNECTION_STRING | Внешний путь к mongodb. | mongodb://dd:dd@external.mongo db:27017?uuidRepresentation=Standard |
Для запуска контейнеров необходимо выполнить команду:
cd compose # перейти в папку compose
docker-compose up -d
Подключить функциональность массового поиска дублей в bpm’online
На стороне bpm’online необходимо выполнить следующие шаги.
1.Установите значение системной настройки “Адрес сервиса дедупликации”. Подробнее >>>
2.Настройте права на системную операцию “Поиск дублей”. Подробнее >>>
3.Включите в bpm’online функциональность массового поиска дублей. Подробнее >>>
a.Для СУБД MS SQL. Подробнее >>>
b.Для СУБД Oracle. Подробнее >>>
c.Для СУБД PostgreSQL. Подробнее >>>
4.Перезапустите приложение bpm’online. Подробнее >>>
Установите значение системной настройки “Адрес сервиса дедупликации”
В разделе [Системные настройки] найдите настройку “Адрес сервиса дедупликации” (DeduplicationWebApiUrl) и в ней укажите URL к dd-web-api, строка следующего типа: http://external.deduplication-web-api:8086.
Настройте права на системную операцию “Поиск дублей”
В разделе [Доступ к операциям] откройте системную операцию “Поиск дублей” (CanSearchDuplicates) и на детали [Доступ к операции] раздайте права необходимым пользователям/ролям, которые смогут выполнять поиск дублей.
Включите в bpm’online функциональность массового поиска дублей
Для включения функциональности (Feature Toggle) массового поиска дублей (Deduplication, ESDeduplication, BulkESDeduplication) необходимо выполнить SQL-скрипт. Этот скрипт различается в зависимости от используемой СУБД — MS SQL, Oracle или Postgre SQL.
DECLARE @DeduplicationFeature NVARCHAR(50) = 'Deduplication';
DECLARE @DeduplicationFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @DeduplicationFeature);
DECLARE @ESDeduplicationFeature NVARCHAR(50) = 'ESDeduplication';
DECLARE @DeduplicationFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @DeduplicationFeature);
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
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;
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 $$;
Перезапустите приложение bpm’online
Очистите redis, перезапустите приложение bpm’online и выполните вход в приложение.
Смотрите также