Документ не попал в полнотекстовый поиск
Ошибки IndexingServiceMessageHandler в Directum RX: документ или карточка не проиндексированы, поиск их не находит. Как отличить проблему Elasticsearch от проблемы с самим документом.
Что это значит
Когда документ создают или меняют, RX отправляет сообщение в очередь индексации, а сервис индексации передаёт текст и карточку в Elasticsearch. Ошибка в обработчике означает, что документ туда не попал. Пользователи не находят его поиском, хотя он есть в системе.
Причин три группы:
- Elasticsearch недоступен или закрыт на запись: заполнен диск, кластер в статусе red, исчерпан лимит шардов;
- Elasticsearch отверг документ: поле не подходит под схему индекса (mapper_parsing_exception), слишком длинное значение (immense term);
- не удалось извлечь текст из файла: повреждённый или зашифрованный документ, неподдерживаемый формат.
Как проверить
- Ответ Elasticsearch во внутреннем исключении: код (400, 429, 503) и тип ошибки.
- Состояние кластера:
GET _cluster/health
GET _cat/allocation?v
- Очередь индексации в RabbitMQ: если она растёт и не убывает, проблема массовая, а не в одном документе.
Что сделать
- Кластер недоступен или закрыт на запись: сначала починить его, потом очередь разберётся сама. Смотрите статьи про заполненный диск и лимит шардов.
- Ошибка схемы на отдельных документах: передать разработчикам пример, поле и значение. Обычно лечится правкой схемы индекса и переиндексацией.
- Плохой файл: документ останется без полнотекстового поиска, но будет находиться по карточке.
- После любых работ с кластером проверить, что очередь индексации пуста, а не застряла.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать