Налаштування 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"
      }
    }
  }
}

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

Ключові метрики для моніторингу:

  • 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 днів