Получить доступ

Документы проиндексированы, но поиск по очевидно присутствующему слову ничего не находит. Какая причина наиболее вероятна?

MiddleПолнотекстовый поискElasticsearch
Ещё спрашивают так:
  • Почему Elasticsearch не находит слово, которое есть в документе?
Коротко

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

  • Поле keyword хранит строку целиком — частичный поиск не сработает
  • Морфология: «кошками» и «кошка» совпадут только со стеммингом для русского
  • Запрос term не анализируется, match — анализируется

А ещё Проверка: _analyze API показывает, какие термины получаются

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Анализатор превращает текст в термины: разбивает на токены, приводит к нижнему регистру, отбрасывает стоп-слова, приводит слова к основе. Если поле проиндексировано с одним анализатором, а запрос разбирается другим, слово «Иванову» может стать термином «иванов» в индексе и остаться «Иванову» в запросе — совпадения нет. Вторая частая причина того же рода: поле объявлено как точное значение без анализа, и тогда поиск работает только по полному совпадению строки целиком. Отладка стандартная — прогнать текст и запрос через API анализа и сравнить получившиеся термины; помнить при этом, что смена анализатора требует переиндексации.

Что хотят услышать

  • Термины против строк.
  • Типичные причины: keyword, разные анализаторы, term против match.
  • Как диагностировать.

Частые ошибки

  • Менять анализатор и ожидать эффекта без переиндексации.
  • Путать анализируемое текстовое поле и поле для точного совпадения.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Расхождение анализаторов: текст при индексации и запрос при поиске разобраны по-разному, и термины не совпадают
  • ✗Индекс переполнен и перестал принимать запросы
  • ✗Поиск возможен только по точному совпадению всего документа
  • ✗Нужно перезапустить кластер после каждой индексации

Что спросят дальше

  • Чем стемминг отличается от лемматизации?
  • Как проверить, на какие термины разбирается текст?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем