Раздел 40 · Elasticsearch и ELK

Инвертированный индекс: сердце поиска

junior~10 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

В первом уроке PostgreSQL искал «пиццу» полным проходом: брал каждую строку и проверял, нет ли в ней нужных букв. Elasticsearch на миллионе блюд отвечает за миллисекунды. Секрет не в мощном железе, а в том, что он вообще не перебирает документы. Вместо этого у него есть структура, которая сразу знает, где лежит каждое слово.

Предметный указатель

Открой в конце толстого учебника предметный указатель. Там по алфавиту стоят слова, а рядом номера страниц: «гранула, 112, 140», «индекс, 23, 57, 112». Чтобы найти, где в книге говорится про гранулы, ты не листаешь все пятьсот страниц. Ты находишь слово в указателе (он отсортирован, это быстро) и сразу получаешь список страниц.

Обычная таблица устроена наоборот: «страница → её текст». Указатель переворачивает её: «слово → страницы». Поэтому его и называют инвертированным индексом.

Как он выглядит

Elasticsearch при записи документа разбирает его текст на термины: обычно это слова, приведённые к нижнему регистру. Для каждого термина в индексе хранится:

  • список документов, где термин встречается (по-английски postings list);
  • позиции термина в каждом документе: нужны, чтобы искать фразы «пицца с грибами» с учётом порядка слов;
  • частоты: сколько раз термин встретился в документе и в скольких документах вообще. Они понадобятся для оценки релевантности в уроке про BM25.

Сам словарь терминов отсортирован, поэтому нужный термин находится за несколько шагов, как слово в указателе.

урок из курса

Урок из курса «Elasticsearch и ELK». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.