Документы проиндексированы, но поиск по очевидно присутствующему слову ничего не находит. Какая причина наиболее вероятна?
- Почему Elasticsearch не находит слово, которое есть в документе?
Совпадать должны термины, а не исходные строки: если текст при индексации и запрос при поиске проходят разные анализаторы, термины не совпадут.
- Поле
keywordхранит строку целиком — частичный поиск не сработает - Морфология: «кошками» и «кошка» совпадут только со стеммингом для русского
- Запрос
termне анализируется,match— анализируется
А ещё Проверка: _analyze API показывает, какие термины получаются
Подробно
Анализатор превращает текст в термины: разбивает на токены, приводит к нижнему регистру, отбрасывает стоп-слова, приводит слова к основе. Если поле проиндексировано с одним анализатором, а запрос разбирается другим, слово «Иванову» может стать термином «иванов» в индексе и остаться «Иванову» в запросе — совпадения нет. Вторая частая причина того же рода: поле объявлено как точное значение без анализа, и тогда поиск работает только по полному совпадению строки целиком. Отладка стандартная — прогнать текст и запрос через API анализа и сравнить получившиеся термины; помнить при этом, что смена анализатора требует переиндексации.
Что хотят услышать
- Термины против строк.
- Типичные причины: keyword, разные анализаторы, term против match.
- Как диагностировать.
Частые ошибки
- Менять анализатор и ожидать эффекта без переиндексации.
- Путать анализируемое текстовое поле и поле для точного совпадения.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Текст при индексации и запрос при поиске разобраны разными анализаторами
- ✗Индекс переполнен и перестал принимать запросы
- ✗Поиск работает только по точному совпадению всего поля, а не по отдельным словам
- ✗Нужно перезапускать кластер после каждой индексации
Что спросят дальше
- Чем стемминг отличается от лемматизации?
- Как проверить, на какие термины разбирается текст?
Разбор темы
- Полнотекстовый поиск (Elasticsearch)
Почему LIKE не поиск, инвертированный индекс, анализаторы, релевантность BM25, query vs filter context и поиск как read model.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.