Настройка Elasticsearch/OpenSearch для поиска Magento 2

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

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

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

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

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка Elasticsearch/OpenSearch для поиска Magento 2
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы

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

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

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

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка Elasticsearch/OpenSearch для поиска Magento 2

Начиная с Magento 2.4.0 MySQL-поиск полностью удалён из ядра — Elasticsearch или OpenSearch обязательны. Версия 2.4.6+ официально поддерживает Elasticsearch 8.x и OpenSearch 2.x. Правильная настройка поисковой инфраструктуры напрямую влияет на конверсию: релевантность результатов, скорость ответа и устойчивость кластера под нагрузкой.

Совместимость версий

Magento Elasticsearch OpenSearch
2.4.3 7.10
2.4.4–2.4.5 7.16–7.17 1.x
2.4.6 8.x 2.x
2.4.7+ 8.x 2.x

OpenSearch предпочтителен для новых проектов: Apache 2.0 лицензия, активная разработка, совместимое API.

Установка OpenSearch для production

Рекомендуемый способ — Docker или пакетная установка на отдельный сервер:

# docker-compose.yml для разработки
services:
  opensearch:
    image: opensearchproject/opensearch:2.11.0
    environment:
      - discovery.type=single-node
      - DISABLE_SECURITY_PLUGIN=true
      - OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g
    ports:
      - "9200:9200"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - opensearch-data:/usr/share/opensearch/data

Для production-кластера минимальная конфигурация — 3 узла (1 master + 2 data):

# /etc/opensearch/opensearch.yml (data node)
cluster.name: magento-search
node.name: data-node-1
node.roles: [data, ingest]
network.host: 0.0.0.0
discovery.seed_hosts: ["master-node:9300"]
cluster.initial_cluster_manager_nodes: ["master-node"]
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch

# Производительность
indices.memory.index_buffer_size: 20%
thread_pool.write.queue_size: 1000

Подключение Magento к OpenSearch

bin/magento config:set catalog/search/engine opensearch
bin/magento config:set catalog/search/opensearch_server_hostname 127.0.0.1
bin/magento config:set catalog/search/opensearch_server_port 9200
bin/magento config:set catalog/search/opensearch_index_prefix magento2
bin/magento config:set catalog/search/opensearch_enable_auth 0
bin/magento config:set catalog/search/opensearch_server_timeout 15

bin/magento indexer:reindex catalogsearch_fulltext
bin/magento cache:flush

Проверка статуса индекса:

curl -X GET "localhost:9200/_cat/indices/magento2*?v&pretty"
curl -X GET "localhost:9200/magento2_product_1/_mapping?pretty" | head -80

Структура индексов Magento 2

Magento создаёт индекс с alias-схемой: magento2_product_1 (активный) и magento2_product_1_v2 (при переиндексации). Это позволяет выполнять zero-downtime reindex через alias swap.

Маппинг атрибутов в индексе управляется через Magento\Elasticsearch\Model\Adapter\FieldMapper. Кастомные атрибуты, помеченные как searchable или filterable, автоматически включаются в индекс:

// Кастомный field mapper для специфических типов
class CustomFieldMapper extends FieldMapper
{
    public function getFieldName($attributeCode, $context = [])
    {
        if ($attributeCode === 'ean_code') {
            return 'keyword_ean_code'; // точное совпадение
        }
        return parent::getFieldName($attributeCode, $context);
    }
}

Настройка релевантности и анализаторов

Дефолтный анализатор Magento подходит для английского. Для русского языка необходим морфологический анализатор — плагин analysis-icu или analysis-morphology:

# Установка плагина для OpenSearch
bin/opensearch-plugin install analysis-icu

# Или для Elasticsearch
bin/elasticsearch-plugin install analysis-icu

Кастомный анализатор для русского языка через настройки индекса:

PUT /magento2_product_1/_settings
{
  "analysis": {
    "analyzer": {
      "russian_search": {
        "type": "custom",
        "tokenizer": "standard",
        "filter": ["lowercase", "russian_stop", "russian_stemmer"]
      }
    },
    "filter": {
      "russian_stop": {
        "type": "stop",
        "stopwords": "_russian_"
      },
      "russian_stemmer": {
        "type": "stemmer",
        "language": "russian"
      }
    }
  }
}

Для применения кастомного анализатора переопределите конфигурацию индекса через di.xml:

<type name="Magento\Elasticsearch\Model\Adapter\Index\Config\EsConfig">
    <arguments>
        <argument name="configPath" xsi:type="string">custom_elasticsearch/index_config</argument>
    </arguments>
</type>

Настройка поисковых весов

Magento позволяет задать веса для атрибутов в поисковом запросе через Admin → Stores → Attributes → Product → Search Weight (1–10). Дополнительно настраивается через catalog_search конфигурацию:

// Программная настройка весов через preference
// Magento\Elasticsearch\SearchAdapter\Query\Builder\Match

protected function buildMatchQueries(array $weightedFields): array
{
    $queries = [];
    foreach ($weightedFields as $field => $weight) {
        $queries[] = [
            'match' => [
                $field => [
                    'query' => $this->query,
                    'boost' => $weight,
                    'fuzziness' => $weight > 5 ? 0 : 'AUTO',
                ]
            ]
        ];
    }
    return $queries;
}

Мониторинг и troubleshooting

Ключевые метрики для мониторинга OpenSearch в контексте Magento:

  • Heap usage — не выше 75% от -Xmx. При OutOfMemoryError увеличьте heap или добавьте ноды.
  • Search latency — p95 < 200ms для продуктового поиска
  • Indexing rate — мониторить при массовом импорте товаров
# Проверка здоровья кластера
curl localhost:9200/_cluster/health?pretty

# Медленные запросы
curl -X PUT "localhost:9200/magento2_product_1/_settings" -H 'Content-Type: application/json' -d'
{
  "index.search.slowlog.threshold.query.warn": "2s",
  "index.search.slowlog.threshold.query.info": "500ms"
}'

# Статистика поисковых запросов Magento
SELECT query_text, num_results, popularity
FROM search_query
ORDER BY popularity DESC
LIMIT 50;

Частая проблема при переиндексации: java.lang.IllegalArgumentException: mapper [price_0_1] cannot be changed from type [float] to [double]. Решение — удаление и пересоздание индекса:

curl -X DELETE "localhost:9200/magento2_product_*"
bin/magento indexer:reindex catalogsearch_fulltext

Сроки настройки

  • Установка OpenSearch + подключение к Magento: 1 день
  • Настройка кластера из 3 нод с репликацией: 1–2 дня
  • Кастомизация анализаторов + весов для русского языка: 2–3 дня
  • Интеграция с Elasticsearch Suite (Smile): 3–5 дней