Data engineering
Полнотекстовый поиск: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Каждый отражает решение, которое ты принимаешь, проектируя или отлаживая реальный поиск — не определение для заучивания, а компромисс, который надо взвесить относительно корпуса, скорости записи и SLO.
Убедись, что связываешь inverted index, конвейер анализа, релевантность BM25, выбор Postgres-vs-движок и операционные ловушки (задержка refresh, reindex-миграции) в единую модель того, как поиск на самом деле себя ведёт.
Запрос по 'running' возвращает ноль результатов без ошибок в логах. Документы проиндексированы со stemming-анализатором; путь запроса анализирует терм иначе. Какова наиболее вероятная корневая причина?
Почему современные движки перешли от чистого TF-IDF к BM25 для скоринга по частоте терма?
SaaS-приложению на Postgres нужен поиск по ~2M тикетам поддержки: keyword-матч, базовая релевантность, умеренные записи, малый ops-бюджет. Какой выбор по умолчанию правильный?
Ты выбрал GIN для tsvector-индекса. Спустя месяцы, на теперь write-heavy таблице, латентность поиска деградирует с перебоями без изменения запроса. Каков наиболее вероятный механизм?
Сервис на Elasticsearch пишет документ и сразу читает его обратно поиском, периодически получая промах. Команда предполагала write-then-read консистентность. Что происходит?
Нужно починить баг stemming, поменяв анализатор существующего поля на 200M документах в Elasticsearch. Какова правильная миграция и почему?
Сквозная линия: совпадение — это токены, а не строки, поэтому один и тот же анализатор должен работать при индексировании и при запросе, иначе получишь молчаливые нули; BM25 ранжирует кандидатов, которых произвёл inverted index, насыщая term frequency и нормализуя длину; Postgres GIN — правильный выбор по умолчанию, пока не понадобятся facets, fuzziness, тюнинг BM25 или масштаб, и тогда внутренний выбор — write-bloat GIN против lossiness GiST; а операционные ловушки — near-real-time задержка refresh и reindex из-за неизменяемых токенов — это причина проектировать за read-алиасом с первого дня.