Формулировка проблемы: для обеспечения поддержки HP/HA-кластеризацию требуется реализовать поддержку всех индексов Synergy на основе Elasticsearch.
Используется: административное приложение - Обслуживание системы.
Решение: необходимо реализовать индексацию документов и хранилища на основе Elasticsearch.
Во-первых, в раздел "Обслуживание системы" требуется добавить пункт "Управление индексом файлов":
Окно "Управление индексом данных форм" содержит текущую статистику состояния данных, параметры и кнопки запуска и остановки индексирования, а также панель информации.
Статистика состояния данных
Размер индекса в байтах: при использовании Lucene (устанавливается по умолчанию) отображается прочерк "-"; при использовании Elasticsearch - текущий размер индекса.
Общее количество записей: общее количество файлов.
Количество удаленных записей: количество индексов, удаленных при изменении индексируемых данных.
Запуск и остановка индексирования
Продолжить предыдущий процесс индексирования: флаг, позволяющий продолжить ранее запущенный и остановленный процесс индексирования.
Если ранее индексирование не осуществлялось, или нет ранее запущенного и остановленного процесса, флаг недоступен.
Если последний процесс индексирования был остановлен, то рядом с флагом указан номер позиции, с которой продолжится индексирование.
Если последний процесс индексирования был остановлен, а флаг отключен, то процесс индексирования начнется заново.
Пауза между индексированием часлей записей (мс): числовое поле ввода, в котором указывается время необходимой паузы в процессе индексирования. Одной "частью" считается индексирование 200 документов.
Процесс запускается по нажатию на кнопку "Проиндексировать все файлы". Система запрашивает подтверждение действия:
"Вы действительно хотите проиндексировать все записи?"
Если пользователь подтверждает действие, процесс индексирования начинается. При этом в панели информации отображается сведения о процессе индексирования каждой части в формате:
"Отправлен запрос на индексирование файлов"
"Индексирование записей начато %ГГГГ-ММ-ДД ЧЧ:ММ%. Займет примерно 2 минуты на каждые 2000 документов. В вашей базе %общее_количество_записей% записей."
"Общее количество записей %общее_количество_записей%, проиндексировано %количество_проиндексированных_записей% за %ss% секунд"
...
"Общее количество записей %общее_количество_записей%, проиндексировано %количество_проиндексированных_записей% за %ss% секунд"
В случае, если в процессе индексирования очередной части возникли ошибки, то их текст будет отображен в отдельном сообщении об ошибке. При этом индексирование будет продолжено.
Процесс останавливается в двух случаях:
Ручная остановка - по нажатию на кнопку "Остановить индексирование". При этом в панели информации выводится сообщение:
"Процесс индексирования остановлен"
Номер позиции, на которой процесс был остановлен, запоминается, и в дальнейшем индексирование можно продолжить с этой позиции либо начать заново.
Все данные проиндексированы - процесс завершается самостоятельно. При этом в панели информации выводится сообщение:
"Индексирование завершено. Индексирование %общее_количество_записей% записей заняло %M% минут"
Помимо панели информации, сообщения о прогрессе индексирования выводятся как уведомления.
Во-вторых, необходимо реализовать переключение индексаторов посредством конфигурационных файлов:
Индекс документов: arta/esb/docIndex.xml
Индекс хранилища: arta/esb/fileIndex.xml
Примечание:
При переключении реализации индекса необходима полная переиндексация данных.
В-третьих, необходимо обновить
конфигурационный файл
arta/elasticConfiguration.xml
, добавив в него
секции, соответствующие настройкам индексирования файлов и
документов.
Документы:
Каждый документ в индексе должен содержать как минимум следующие поля:
Имя поля в индексе | Тип поля | Хранимые данные в терминах Synergy |
---|---|---|
documentId |
keyword |
идентификатор документа |
docID |
keyword |
идентификатор РКК |
createDate |
keyword |
дата создания документа (в мс) |
modified |
keyword |
дата изменения документа (в мс) |
createDate_num |
long |
дата создания документа (в мс) |
number |
text |
номер документа |
registered |
long |
дата регистрации документа (в мс) |
subject |
text |
краткое содержание |
correspondent |
text |
корреспондент |
correspondent_org |
text |
корреспондент (орг.) |
base_number |
text |
номер исходящего документа |
base_date |
long |
дата дата исходящего документа (в мс) |
reg_date |
long |
дата регистрации документа (в мc) |
doc_type |
keyword |
идентификатор типа документа |
doctypename |
text |
название типа документа |
duration |
long |
длительность (рабочих дней) |
author |
keyword |
ID автора документа |
authorname |
text |
имя автора документа |
reg_user |
keyword |
ID пользователя, зарегистрировавшего документ |
regusername |
text |
имя пользователя, зарегистрировавшего документ |
counter_number |
long |
склеенная числовая часть номера документа |
control |
boolean |
признак контрольного документа |
defective |
boolean |
признак бракованного документа |
writtenoff |
boolean |
признак списанного в дело документа |
active |
boolean |
признак наличия работ по документу |
late |
boolean |
признак просроченного документа |
register |
keyword |
ID журнала, в котором расположен документ |
docfile |
keyword |
ID дела, к которому относится документ |
registry |
keyword |
ID реестра, к которому относится документ |
counter |
long |
числовая часть счетчика документа |
ui |
keyword |
символьный суффикс номер документа |
uinumber |
long |
числовая часть номера документа |
status_sort |
long |
код статуса документа |
sent_date_* |
long |
дата отправки документа пользователем (в мс) |
read_date_* |
long |
дата прочтения документа пользователем (в мс) |
sending_date_* |
long |
дата получения документа пользователем (в мс) |
lastdate_* |
long |
максимум между датой прочтения и отправки документа пользователем (в мс) |
read_* |
boolean |
признак того, что документ прочитан |
hidden_* |
boolean |
признак того, что документ скрыт от пользователя |
all |
keyword |
список ID пользователей, у которых документ должен быть в фильтре "Все документы" |
sent |
keyword |
список ID пользователей, у которых документ должен быть в фильтре "Отправленные" |
received |
keyword |
список ID пользователей, у которых документ должен быть в фильтре "Полученные" |
mine |
keyword |
список ID пользователей, у которых документ должен быть в фильтре "Мои" |
counter<N>
- поле, содержищее
числовую часть счетчика документа.
<N>
- порядковый номер части, от 1 до
5;
ui<N>
- поле, содержащее суффикс
номера документа (не числовой), расположенный между числовыми
частями номера. <N>
- порядковый
номер суффикса, от 1 до 5;
uinumber<N>
- поле, содержащее
числовую часть номера документа, расположенную между
символьными суффиксами. <N>
-
порядковый номер части, от 1 до 5;
в полях с постфиксом _*
вместо *
используется ID пользователя.
поле docID
должно загружаться в индекс в
том случае, если у документа есть сохраненная РКК.
Для следующих полей используется русскоязычный анализатор текста:
correspondent
correspondent_org
doctypename
authorname
regusername
username
number
base_number
formvalues
subject
base_number
formvalues
Кроме того, для полей number
,
subject
, base_number
и
formvalues
дополнительно используется параметр
веса.
Файлы и ярлыки:
Каждый документ в индексе должен содержать как минимум следующие поля:
Имя поля в индексе | Тип поля | Хранимые данные в терминах Synergy |
---|---|---|
NODE_ID |
keyword |
ID файла |
DOC_CREATED |
long |
дата создания файла (в мс) |
DOC_AUTHOR_ID |
keyword |
ID пользователя, создавшего файл |
PARENT_NODE_ID |
keyword |
ID родительской папки файла |
PATH |
keyword |
расположение файла |
DOC_FILENAME |
text |
название файла |
NODE_NAME |
text |
название файла |
DOC_COMPANION_ID |
keyword |
тип сущности, к которой принадлежит файл (документ, заметка, план, личное дело) |
DOC_CATEGORIES |
long |
список категорий, к которым принадлежит файл |
DOC_EXPIRE_DATE |
long |
срок действия версии файла (в мс) |
DOC_PUBLISH_DATE |
long |
дата публикации файла (в мс) |
DOC_SIZE |
long |
размер файла (в байтах) |
DOC_COMPANION_MEMBERS |
keyword |
массив ID пользователей, имеющих доступ к файлу согласно их правам на COMPANION_ID |
DOC_MIME_TYPE |
keyword |
название типа файла |
ANCESTORS |
keyword |
список идентификаторов родительских папок |
DOC_TITLE |
text |
название файла |
DOC_CONTENT |
text |
текст документа (если возможно выделить непосредственно текст или служебную информацию для данного типа файла) |
DOC_COMMENTS |
text |
комментарий к текущей версии файла |
DOC_METADATA |
text |
склеенные данные свойств файла |
READS_COUNT |
long |
количество открытий файла |
Помимо описанного набора полей, для каждого свойства файла с кодом
optionID
создается поле с именем
aiDocumentCompanionField<optionID>
.
Для следующих полей используется русскоязычный анализатор текста:
DOC_CONTENT
DOC_METADATA
DOC_FILENAME
NODE_NAME
DOC_TITLE
DOC_COMMENTS
Кроме того, для полей DOC_FILENAME
,
NODE_NAME
, DOC_TITLE
,
DOC_COMMENTS
дополнительно используется
параметр веса.
Примечания:
Описанный набор полей применяется для индексации как файлов, так и ярлыков. Часть полей в индексе может быть пустой, если невозможно выделить соответствующее свойство файла (например, список свойств и категорий для ярлыка).
Для всех анализируемых текстовых полей в индексе файлов создаются дополнительные текстовые анализируемые поля для каждой используемой локали.