Задача [SM1]: Управление индексом документов и информация о нем

Формулировка проблемы: плохая документированность предназначения и поведения индексатора документов ARTA Synergy приводит к тому, что документы переиндексируются в любых случаях, которые, по мнению администраторов, относятся к проблемам с поиском и отображением документов, а также в случаях «почему бы и не переиндексировать».

Используется: индексатор документов ARTA Synergy, Административное приложение.

Решение:

Переименование раздела управления индексом

Необходимо переименовать раздел «Управление БД документов» в «Управление индексом документов», так как текущее название (оставшееся от реализации поиска документов на Cassandra) вводит в заблуждение.

Версия индекса

Необходимо ввести версию индекса документов. Версия индекса документов - неотрицательное целое число, характеризующее его структуру. При любом изменении структуры индекса (добавление/удаление полей, изменение их типов и т.п.) необходимо увеличивать значение версии индекса.

В разделе «Управление индексом документов» Административного приложения необходимо отображать две версии индекса:

  • Текущую - это версия индекса, с которым который подключен к системе на текущий момент

  • Доступную - это версия индекса, с которым может и должна работать запущенная система

Если текущая версия индекса меньше доступной, необходимо полное переиндексирование.

Рисунок 351. Управление индексом документов

Управление индексом документов

Статистика по индексу

В разделе «Управление индексом документов» Административного приложения необходимо отображать следующую информацию об индексе (см. иллюстрацию выше):

  • Количество добавленных в индекс документов

  • Количество удалённых из индекса документов

На основе этой информации администратор может принять решение о переиндексировании. Если соотношение количества добавленных и удалённых документов составляет 1/2 или более, требуется оптимизация индекса - кнопка Оптимизировать индекс становится активной.

API-методы для манипуляции с индексом

Необходимо реализовать методы для манипуляции с индексом - получение информации, переиндексирование и оптимизация.

Информация об индексе
  • URL метода: rest/api/admin/index/info

  • Тип запроса: GET

Возвращает данные о состоянии индекса в виде JSON-объекта:

{
    "version": 1,
    "versionMax": 2,
    "docsAdded": 5000,
    "docsRemoved" :2500
}
Запуск переиндексации
  • URL метода: rest/api/admin/index/reindex/start

  • Тип запроса: POST

Метод принимает на вход JSON-объект следующего вида:

{
    "resume": "false",
    "pause": 0
}

где:

  • resume - продолжить предыдущий процесс индексирования, по умолчанию false

  • pause - пауза между индексированием частей документов, в миллисекундах. Значение по умолчанию - 0

Все параметры являются необязательными.

Метод возвращает JSON-объект следующего вида:

{
    "errorCode": 0,
    "errorMessage": ""
}

где:

  • errorCode - код ошибки:

    • 0 - успешно

    • 7 - процесс переиндексации уже идет

    • 13 - ошибка при запуске переиндексации

  • errorMessage - сообщение об ошибке

Информация о процессе переиндексации
  • URL метода: rest/api/admin/index/reindex/info

  • Тип запроса: GET

Метод возвращает информацию о процессе индексирования в виде JSON-объекта:

{
    "lastStatus": "FINISHED",
    "lastMessage": "Индексирование документов завершено",
    "lastStatusChanged": 1435729293
}

где:

  • lastStatus - статус последней переиндексации, один из:

    • FINISHED - завершено

    • IN_PROGRESS - в процессе

    • NOT_STARTED - индексация не проводилась

  • lastStatusChanged - дата и время последнего изменения статуса, в формате Unix timestamp

  • lastMessage - последнее сообщение процесса индексации

Запуск оптимизации индекса
  • URL метода: rest/api/admin/index/optimize/start

  • Тип запроса: POST

Метод принимает на вход JSON-объект следующего вида:

{
    "wait": "false",
    "maxSegmentCount": 0
}

где:

  • wait - дождаться окончания оптимизации индекса до выдачи результата, по умолчанию false

  • maxSegmentCount - максимальное количество сегментов индекса, которое необходимо оптимизировать. Если передано значение <= 0, либо параметр отсутствует, индекс будет оптимизирован полностью. Значение по умолчанию - 0

Все параметры являются необязательными.

Метод возвращает JSON-объект следующего вида:

{
    "errorCode": 0,
    "errorMessage": ""
}

где:

  • errorCode - код ошибки:

    • 0 - успешно

    • 7 - процесс оптимизации уже идет

    • 13 - ошибка при запуске оптимизации

  • errorMessage - сообщение об ошибке

Информация о процессе оптимизации индекса
  • URL метода: rest/api/admin/index/optimize/info

  • Тип запроса: GET

Метод возвращает информацию о процессе оптимизации индекса в виде JSON-объекта:

{
    "lastStatus": "FINISHED",
    "lastMessage": "Оптимизация индекса завершена",
    "lastStatusChanged": 1435729293
}

где:

  • lastStatus - статус последней оптимизации индекса, один из:

    • FINISHED - завершено

    • IN_PROGRESS - в процессе

    • NOT_STARTED - оптимизация не проводилась

  • lastStatusChanged - дата и время последнего изменения статуса, в формате Unix timestamp

  • lastMessage - последнее сообщение процесса оптимизации