awesome-everything EN
↑ Обратно к восхождению

Data engineering

Полнотекстовый поиск: тест с выбором ответа

Суть Тест с выбором на синтез по всему юниту — inverted index, паритет анализаторов, тюнинг BM25, GIN vs GiST, near-real-time refresh и reindex без даунтайма.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов поперёк всего юнита. Каждый отражает решение, которое ты принимаешь, проектируя или отлаживая реальный поиск — не определение для заучивания, а компромисс, который надо взвесить относительно корпуса, скорости записи и 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-алиасом с первого дня.

Продолжить восхождение ↑Полнотекстовый поиск: тест на свободное припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.