Шаг 1: Утро. Диагностика ошибок схемы и индексации (09:00 - 11:00).
Первая и самая частая категория ошибок связана со схемой данных (schema) и процессом индексации. Вы видите ошибку "class 'Article' not found" или "property 'title' not present"? Это верный признак проблемы.
Действия:
- Остановитесь и проверьте существующую схему через клиент Weaviate: `client.schema.get()` или REST API `GET /v1/schema`.
- Сравните ее с той, которую ваше приложение пытается использовать для добавления данных. Часто возникает рассинхрон между кодом, который создает классы, и кодом, который их заполняет. Решение: реализуйте идемпотентную инициализацию схемы. Перед началом работы приложения запускайте скрипт, который проверяет существование классов и свойств и создает их при отсутствии.
- Другая частая ошибка — "vectorizer module 'text2vec-transformers' is not available". Это означает, что при запуске контейнера Weaviate не был включен нужный модуль. Решение: перезапустите Weaviate с правильной переменной окружения, например: `ENABLE_MODULES='text2vec-transformers'`. Всегда сверяйтесь с документацией по требуемым модулям для вашего сценария.
После обеда переходим к более коварным проблемам. Запросы выполняются медленно, или результаты поиска выглядят неточными.
Действия:
- **Анализ векторизации.** Если вы используете модуль векторного преобразования (например, `text2vec-openai`), убедитесь, что API-ключ действителен и нет лимитов. Логируйте ошибки от модуля. Для локальных векторных модулей проверьте наличие GPU, если он требуется.
- **Настройка индекса HNSW.** Производительность векторного поиска напрямую зависит от параметров индекса `hnsw`. Критические параметры: `ef`, `efConstruction` и `maxConnections`. Ошибка — использовать значения по умолчанию для production. Потратьте час на настройку: увеличьте `efConstruction` (например, до 128-256) для улучшения качества индекса при его построении и `ef` (например, до 128) для улучшения точности поиска. Помните, это увеличит потребление памяти и время индексации.
- **Фильтрация (where).** Сложные фильтры по свойствам до векторного поиска (`where` в `nearText`) могут резко снизить производительность. Убедитесь, что свойства, используемые в фильтрах, индексируются (`indexFilterable: true`). Рассмотрите возможность использования гибридного поиска (`hybrid`), который лучше сочетает фильтрацию и релевантность.
Самое сложное — ошибки, связанные с ресурсами. "Out of memory" или резкий рост времени отклика при увеличении объема данных.
Действия:
- **Мониторинг.** Установите мониторинг для Weaviate (Prometheus + Grafana). Ключевые метрики: использование памяти процессом Weaviate, скорость запросов, время индексации. Ошибка часто в том, что за ростом объема данных не следят.
- **Шардирование.** Если вы еще не используете шардирование, самое время его включить. Для больших классов добавьте шарды через API: `POST /v1/schema/{ClassName}/shards`. Это распределит данные и нагрузку по нескольким узлам (шардам), даже в рамках одного сервера.
- **Кэширование.** Настройте кэширование в Weaviate для часто выполняемых запросов, особенно тех, которые используют одни и те же векторные представления. Это снизит нагрузку на модули векторного преобразования.
- **Очистка (housekeeping).** Регулярно проводите "уборку": удаляйте старые или ненужные объекты. Накопление удаленных объектов (tombstones) может влиять на производительность. Используйте API для компактификации.
Система стабилизирована. Теперь важно закрепить успех.
Действия:
- Создайте документацию по вашей текущей схеме и конфигурации Weaviate (версия, модули, параметры индекса).
- Автоматизируйте скрипт инициализации схемы и мониторинга.
- Запланируйте регулярный ревью конфигурации индексов при значительном изменении объема или характера данных.
Комментарии (7)