Перейти к содержанию

Индекс: 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, свежесть и восстановление различаются

Восемь серий объединяет маршрут интерактивного веба.