BM25 считает оценку по терминам: сколько раз встретился, насколько редкий, какая длина поля. А откуда берутся сами термины? Их делает анализатор. От него зависит, найдёт ли «ежики» блюдо «Ёжики», а «creme brulee» десерт «Crème brûlée». Разберём, из чего анализатор состоит.
Три стадии
Анализатор это маленький конвейер из трёх стадий, похожий на пайплайн Logstash:
- Фильтры символов правят сырой текст до разбиения: заменяют «ё» на «е», вырезают HTML-теги. Их может не быть.
- Токенизатор режет текст на токены, обычно слова. Он ровно один.
- Фильтры токенов обрабатывают каждое слово: нижний регистр, стоп-слова, окончания, синонимы. Их может быть сколько угодно, работают по порядку.
Что вышло из последнего фильтра, то и попадёт в инвертированный индекс.
Токенизаторы
standardрежет по правилам Unicode для границ слов: понимает русские и латинские буквы, числа, выбрасывает знаки препинания. Это токенизатор по умолчанию.whitespaceрежет только по пробелам, и знаки остаются на словах: «скидка!» так и останется со знаком.keywordне режет вовсе: вся строка это один токен. Так работают поляkeyword.edge_ngramиngramрежут на кусочки: «пицца» станет «пи», «пиц», «пицц». Это основа поиска по началу слова, вернёмся к нему в уроке про автодополнение.
Фильтры токенов
lowercaseприводит к нижнему регистру. Без него «Пицца» и «пицца» разные термины.asciifoldingубирает диакритику: «crème» станет «creme».stopвыбрасывает частые слова без смысла: предлоги, союзы.stemmerотрезает окончания по правилам языка. Об этом следующий урок.synonymдобавляет синонимы: «бургер» найдёт «гамбургер».
урок из курса
Урок из курса «Elasticsearch и ELK». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.