paths / python-search-engine
учебный путь · python

Поисковый движок «Искра»

  • Python
  • medium
  • 5 модулей
  • 25 задач
  • Premium

Соберите настоящий полнотекстовый поиск для базы знаний компании: токенизация, инвертированный индекс, булевы и фразовые запросы, TF-IDF-ранжирование, сниппеты и подсказки. Каждая задача — рабочий модуль движка, финал — собранный поиск целиком.

AI-ассистент ведёт подсказками, но решение не выдаёт
intro

Что тебя ждёт в этом пути

// Что ты построишь

Полноценный поисковый движок «Искра» на чистом Python — без сторонних библиотек. Ты пройдёшь путь от сырого текста до работающего search(): напишешь конвейер обработки текста, построишь инвертированный индекс, реализуешь парсер запросов с фразовым поиском и исключениями, добавишь TF-IDF-ранжирование и сниппеты с подсветкой совпадений. В финале — готовый движок, который умеет принимать живую строку запроса и возвращать отранжированные результаты с пагинацией.

// Для кого

Ты знаешь базовый Python — функции, словари, списки — и хочешь собрать настоящую систему, а не решать оторванные задачи. Опыт с поиском или алгоритмами не нужен: всё разбираем с нуля, шаг за шагом.

// Чему научишься
  • Токенизация, нормализация и стемминг текста
  • Инвертированный индекс: булевы, частотные и позиционные постинги
  • Фразовый поиск и булева семантика must / should / must_not
  • TF-IDF и пофилдовое ранжирование с бустами
  • Пагинация и сниппеты с подсветкой совпадений
  • Подсказки при опечатках на основе расстояния Левенштейна
  • Декомпозиция большой системы на маленькие, изолированно тестируемые функции
curriculum

Задачи пути — 5 модулей, 25 задач

Каждый модуль — навык. Решаешь задачи по порядку, и к финалу из них собирается рабочий результат.

1.1
Токенизатор текста
Разбейте сырой текст статьи на нормализованные токены — первый модуль поискового движка «Искра»
1.2
Фильтр стоп-слов
Очистите поток токенов от стоп-слов и односимвольного шума, сохранив порядок и дубликаты
1.3
Лёгкий стеммер
Срежьте с терма самое длинное подходящее окончание, не разрушив основу слова
1.4
Конвейер обработки текста
Соберите токенизатор, фильтр и стеммер в единый конвейер — общий контракт для индексации и запросов
1.5
Очистка корпуса документов
Отделите валидные статьи от мусора в грязном экспорте вики и составьте отчёт об отбраковке
2.1
Булевы постинги
Постройте первый настоящий индекс «Искры»: терм → отсортированный список документов, в которых он встречается
2.2
Частотные постинги
Подсчитайте, сколько раз каждый терм встречается в каждом документе, — сырьё для TF-IDF-ранжирования «Искры»
2.3
Позиционный индекс
Сохраните позиции каждого вхождения терма в документах — без них фразовый поиск «Искры» невозможен
2.4
Слияние шардов индекса
Склейте частотные постинги от параллельных индексаторов в единый индекс, отдавая приоритет более свежим данным
2.5
Статистика индекса
Снимите сводку с готового индекса: число документов, размер словаря, средняя длина документа и документная частота термов
3.1
Пересечение постингов
Найдите документы, содержащие все термы запроса сразу, — операция AND поверх инвертированного индекса «Искры»
3.2
Булев запрос
Реализуйте семантику must / should / must_not поверх булевых постингов — ядро булева поиска «Искры»
3.3
Фразовый поиск
Найдите документы, где термы запроса стоят на подряд идущих позициях, — позиционный индекс превращается в поиск точных фраз
3.4
Парсер поискового запроса
Разберите живую строку запроса на термы, фразы в кавычках и исключения с минусом — тем же конвейером, что обрабатывал документы
3.5
Исполнение запроса
Соедините термы, фразы и исключения разобранного запроса в готовую выдачу — финальный модуль движка запросов «Искры»
4.1
Вес редкости терма (IDF)
Превратите частоту документов в вес редкости терма: сглаженный IDF — первый кирпич ранжирования «Искры»
4.2
TF-IDF скор документа
Оцените релевантность документа запросу: частота терма, помноженная на вес редкости, — сердце ранжирования «Искры»
4.3
Ранжирование выдачи
Превратите скоры в порядок: детерминированная сортировка кандидатов с tie-break по doc_id — финальная выдача «Искры»
4.4
Поля с разным весом
Совпадение в заголовке дороже совпадения в тексте: пофилдовый TF-IDF с бустами и общим df — продовый скорер «Искры»
4.5
Пагинация выдачи
Нарежьте отранжированную выдачу на страницы с метаданными навигации и строгой валидацией page и per_page
5.1
Сниппет результата
Выберите окно документа, где слова запроса стоят плотнее всего, — фрагмент, который пользователь увидит в выдаче «Искры»
5.2
Подсветка совпадений
Оберните совпавшие слова сниппета в маркеры [[...]] — фронтенд «Искры» превратит их в подсветку
5.3
Похожие термы
Определите, отличаются ли два терма не больше чем на одну правку, — фундамент подсказок при опечатках
5.4
Подсказка «возможно, вы имели в виду»
Подберите до трёх исправлений опечатки по словарю движка: сначала самые частые в корпусе, при равенстве — по алфавиту
5.5
Сборка движка: search() капстоун
Капстоун пути: соберите конвейер, индекс, AND-отбор, TF-IDF, сортировку и пагинацию в одну функцию search() — публичную точку входа «Искры»
Путь входит в Koddo Premium Открой все премиум-пути, AI-ассистента без лимитов и daily challenge. от 490 ₽ / мес
koddo start python-search-engine

Готов начать этот путь?

Зарегистрируйся — откроем путь прямо на первой задаче. Без установки и настройки, всё в браузере.