Настройка Elasticsearch для поиска в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Настройка Elasticsearch для поиска в мобильном приложении
Средний
~2-3 дня
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Настройка Elasticsearch для поиска в мобильном приложении

Нативный поиск по базе данных через LIKE '%query%' не работает для продукта с более чем несколькими тысячами записей: медленно, нет релевантности, нет подсветки совпадений, нет полнотекстового поиска с морфологией. Elasticsearch решает все эти проблемы, но требует правильной настройки на стороне сервера и грамотной интеграции в мобильном клиенте.

Архитектура: мобильное приложение не обращается к ES напрямую

Главное правило: мобильный клиент никогда не делает запросы напрямую к Elasticsearch. Всегда через backend API. Причины — безопасность (не раскрывать структуру индекса и учётные данные), возможность кэширования на сервере, контроль нагрузки.

Типичная схема: мобильное приложение → GET /api/search?q=кроссовки&category=sport&page=1 → Laravel/Node backend → Elasticsearch → ответ с пагинацией и метаданными.

Настройка индекса

Для русскоязычного контента обязателен анализатор с морфологией. Используем плагин analysis-morphology (от Артефакт) или analysis-russian (встроен в ES). Без морфологии поиск «кроссовки» не найдёт «кроссовок» или «кроссовка».

Пример маппинга поля с русским анализатором:

{
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "analyzer": "russian",
        "fields": {
          "keyword": { "type": "keyword" }
        }
      }
    }
  }
}

Поле keyword нужно для сортировки и агрегаций — text для этого не подходит.

Что важно для мобильного UX

Подсказки при вводе (autocomplete). Реализуем через completion suggester или search_as_you_type тип поля. Второй проще в настройке и хорошо работает для коротких запросов:

"title": {
  "type": "search_as_you_type"
}

Запросы идут при каждом изменении поля с debounce 300ms. Показываем не более 5-7 подсказок.

Фасетный поиск (фильтры). Агрегации ES позволяют получать количество товаров в каждой категории/бренде одним запросом. В мобильном приложении это нижний шит с фильтрами — значения чипов обновляются при каждом изменении фильтра без повторного запроса (используем cached aggregations).

Релевантность и ранжирование. function_score запрос позволяет повысить рейтинг новых товаров, товаров с высоким рейтингом или персонализированных результатов. Для e-commerce типичная формула: базовый текстовый score × boost за популярность × decay-функция по дате.

Пагинация. Стандартный from/size работает только до 10 000 результатов (ограничение index.max_result_window). Для курсорной пагинации используем search_after с sort по уникальному полю. В мобильном приложении это бесконечный скролл без кнопки «следующая страница».

Оффлайн-поиск

ES требует сетевого подключения. Для базового офлайн-поиска: кэшируем последние результаты в SQLite, поиск по кэшу через FTS5 (CREATE VIRTUAL TABLE ... USING fts5). Качество хуже, но работает без сети.

Мониторинг и производительность

Медленные запросы к ES (более 500ms) нужно логировать. На сервере включаем slowlog — ES сам пишет в лог запросы дольше порога. В мобильном приложении отображаем skeleton-заглушки пока идёт поиск, и показываем «Поиск занимает больше времени, чем обычно» если запрос не вернулся за 3 секунды.

Сроки: настройка индекса ES с русской морфологией, интеграция search API и базовый UI поиска — 1-2 недели. Фасетный поиск, автодополнение и офлайн-кэш — 3-4 недели.