Индекс: OpenSearch для Markdown-библиотеки
Создадим «Индекс» — отдельную поисковую копию собственной Markdown-библиотеки. Пройдём от договора полей к mappings и русскому анализу, загрузим документы, добавим точные фильтры, фасеты, безопасные фрагменты и управляемое ранжирование. Затем разберём изменения, удаления, aliases, reindex, доступ и сопровождение.
Серия посвящена операциям поискового движка и его индекса. Общая модель поиска уже раскрыта в поиске по сайту, векторный маршрут — в RAG и pgvector. Эти курсы не являются обязательным скрытым источником кода нового проекта. Достаточно знакомства с Python, HTTP, JSON и Markdown.
Python 3.13, OpenSearch 3.9.0; сторонних Python-пакетов нет. Для импортёра требуется Unix-подобная среда с fcntl. Сервер читатель предоставляет отдельно.
Один владелец записи, один shard без replicas, узкий Markdown-формат, публичный фильтр без входа сотрудников и последовательный loopback HTTPServer. Пример не обещает производственную устойчивость, измеренное качество или автоматическую интеграцию с RabbitMQ.
Архив полного итогового проекта содержит реальные исходники, README, данные и карту этапов. Это один проект, не набор самостоятельных снимков уроков. Учебные приложения, broker/engine, базы, запросы, тесты и замеры при подготовке не запускались. Все результаты статей обозначены ожидаемыми.
Уроки и результаты
| № | Урок | Новый результат |
|---|---|---|
| 01 | Поисковый индекс как отдельная копия библиотеки | Источник и проекция разделены |
| 02 | Подготовка Markdown для поисковой записи | Полный корпус проверяется до сети |
| 03 | Явные mappings для текста и точных значений | Пустой library-v1 имеет явные mappings |
| 04 | Русский анализатор и технические обозначения | Русская цепочка и identifiers объяснены |
| 05 | Пакетный импорт и ошибки отдельных документов | Bulk проверяет каждую операцию |
| 06 | Поиск по заголовку и основному тексту | Создан первоначальный alias и запрос по полям |
| 07 | Фильтры рубрики, метки и видимости | Рубрика, метка и видимость фильтруются |
| 08 | Фасеты и область подсчёта групп | Фасеты учитывают ту же область |
| 09 | Подсветка совпадений без исполнения HTML | Фрагменты строятся безопасно как текст |
| 10 | Управление ранжированием через контрольные запросы | Предпочтения связаны с контрольными запросами |
| 11 | Изменения и удаления через манифест импорта | Хеши и манифест задают инкрементальные действия |
| 12 | Перенос схемы и атомарное переключение aliases | Новая схема переносится при паузе и переключении aliases |
| 13 | Публичный gateway и пределы поискового запроса | Loopback API принимает только известные параметры |
| 14 | Сопровождение и передача проекта Индекс | Health, свежесть и восстановление различаются |
Восемь серий объединяет маршрут интерактивного веба.