Building a Simple Search Engine That Works
Создание простого поискового движка, который работает с существующей базой данных без внешних сервисов, дает полный контроль и упрощает отладку. Основная концепция — токенизация контента, его хранение и сопоставление токенов при поиске с последующим расчетом релевантности. Схема базы данных включает две таблицы: index_tokens для хранения уникальных токенов с их весами и index_entries для связи токенов с документами. Индексы оптимизируют запросы по типу документа, ID токена и весу.
Токенизация — ключевой процесс, разбивающий текст на searchable части. Реализованы разные стратегии: WordTokenizer (вес 20) для точных совпадений, который нормализует текст и фильтрует короткие слова, и PrefixTokenizer (вес 5) для частичных совпадений, генерирующий префиксы слов. Интерфейс TokenizerInterface упрощает расширение функциональности. Вес токенов рассчитывается как произведение веса поля, веса токенизатора и квадратного корня длины токена, что обеспечивает гибкую систему ранжирования результатов.