Задача [FIM2]: Поддержка индекса документов и хранилища на основе Elasticsearch

Формулировка проблемы: для обеспечения поддержки HP/HA-кластеризацию требуется реализовать поддержку всех индексов Synergy на основе Elasticsearch.

Используется: административное приложение - Обслуживание системы.

Решение: необходимо реализовать индексацию документов и хранилища на основе Elasticsearch.

Интерфейс

Во-первых, в раздел "Обслуживание системы" требуется добавить пункт "Управление индексом файлов":

Рисунок 53. Новый раздел в административном приложении

Новый раздел в административном приложении

Рисунок 54. Вид окна "Управление индексом файлов"

Вид окна "Управление индексом файлов"

Окно "Управление индексом данных форм" содержит текущую статистику состояния данных, параметры и кнопки запуска и остановки индексирования, а также панель информации.

Статистика состояния данных

  1. Размер индекса в байтах: при использовании Lucene (устанавливается по умолчанию) отображается прочерк "-"; при использовании Elasticsearch - текущий размер индекса.

  2. Общее количество записей: общее количество файлов.

  3. Количество удаленных записей: количество индексов, удаленных при изменении индексируемых данных.

Запуск и остановка индексирования

  1. Продолжить предыдущий процесс индексирования: флаг, позволяющий продолжить ранее запущенный и остановленный процесс индексирования.

    • Если ранее индексирование не осуществлялось, или нет ранее запущенного и остановленного процесса, флаг недоступен.

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

    • Если последний процесс индексирования был остановлен, а флаг отключен, то процесс индексирования начнется заново.

  2. Пауза между индексированием часлей записей (мс): числовое поле ввода, в котором указывается время необходимой паузы в процессе индексирования. Одной "частью" считается индексирование 200 документов.

Процесс запускается по нажатию на кнопку "Проиндексировать все файлы". Система запрашивает подтверждение действия:

"Вы действительно хотите проиндексировать все записи?"

Если пользователь подтверждает действие, процесс индексирования начинается. При этом в панели информации отображается сведения о процессе индексирования каждой части в формате:

"Отправлен запрос на индексирование файлов"

"Индексирование записей начато %ГГГГ-ММ-ДД ЧЧ:ММ%. Займет примерно 2 минуты на каждые 2000 документов. В вашей базе %общее_количество_записей% записей."

"Общее количество записей %общее_количество_записей%, проиндексировано %количество_проиндексированных_записей% за %ss% секунд"

...

"Общее количество записей %общее_количество_записей%, проиндексировано %количество_проиндексированных_записей% за %ss% секунд"

В случае, если в процессе индексирования очередной части возникли ошибки, то их текст будет отображен в отдельном сообщении об ошибке. При этом индексирование будет продолжено.

Процесс останавливается в двух случаях:

  1. Ручная остановка - по нажатию на кнопку "Остановить индексирование". При этом в панели информации выводится сообщение:

"Процесс индексирования остановлен"

Номер позиции, на которой процесс был остановлен, запоминается, и в дальнейшем индексирование можно продолжить с этой позиции либо начать заново.

  1. Все данные проиндексированы - процесс завершается самостоятельно. При этом в панели информации выводится сообщение:

"Индексирование завершено. Индексирование %общее_количество_записей% записей заняло %M% минут"

Помимо панели информации, сообщения о прогрессе индексирования выводятся как уведомления.

Рисунок 55. Процесс индексирования остановлен

Процесс индексирования остановлен

Рисунок 56. Процесс индексирования завершен

Процесс индексирования завершен

Во-вторых, необходимо реализовать переключение индексаторов посредством конфигурационных файлов:

  • Индекс документов: 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<N>

long

числовая часть счетчика документа

ui<N>

keyword

символьный суффикс номер документа

uinumber<N>

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 дополнительно используется параметр веса.

Примечания:

  1. Описанный набор полей применяется для индексации как файлов, так и ярлыков. Часть полей в индексе может быть пустой, если невозможно выделить соответствующее свойство файла (например, список свойств и категорий для ярлыка).

  1. Для всех анализируемых текстовых полей в индексе файлов создаются дополнительные текстовые анализируемые поля для каждой используемой локали.