Установка

Требования

Расширение поддерживает версии Elasticsearch 5.0 и выше. Совместимость с последними версиями веток Elasticsearch 5.x, 6.x и 7.x тестируется автоматически.

Настройка Elasticsearch

Для реализации отдельных функций, таких как updateAllCounters(), в расширении используются инлайн-скрипты. Скрипты написаны на языке painless, который Elasticsearch обычно выполняет в песочнице. В современных версиях сервера запуск таких скриптов разрешен по умолчанию, поэтому специально ничего настраивать не нужно. Тем не менее, для более старых серверов, например, версии 5.0, запуск инлайн-скриптов нужно явно разрешить. В документации Elasticsearch это описано более подробно.

Установка через Composer

Предпочтительный способ установки расширения - с помощью composer.

composer require --prefer-dist yiisoft/yii2-elasticsearch

Настройка приложения

Для работы с расширением нужно добавить класс Connection к компонентам приложения и настроить его:

return [
    //....
    'components' => [
        'elasticsearch' => [
            'class' => 'yii\elasticsearch\Connection',
            'nodes' => [
                ['http_address' => '127.0.0.1:9200'],
                //настройте несколько хостов, если у вас есть кластер
            ],
            // установите autodetectCluster = false, чтобы не определять адреса узлов в кластере автоматически
            // 'autodetectCluster' => false,
            'dslVersion' => 7, // по умолчанию - 5
        ],
    ],
];

В параметрах соединения нужно задать хотя бы один узел. По умолчанию выполняется автоматическое определение узлов кластера. Расширение выполняет запрос GET /_nodes к первому узлу из списка и получает адреса всех узлов в кластере. Затем из этих узлов случайным образом выбирается активный узел.

Такое поведение можно отключить, установив параметр $autodetectCluster равным false. Тогда активным станет произвольный узел из тех, что заданы в конфигурации.

Для нормальной работы автоопределения узлов кластера, в узлах, которые возвращает запрос GET /_nodes, должно быть корректно задано поле http_address. Со стандартным сервером Elasticsearch обычно не возникает никаких сложностей, но известны случаи, когда нестандартные сборки, особенно в AWS, возвращают некорректные данные. В таком случае можно отключить автоопределение и задать список узлов вручную.

Также автоопределение можно отключить чтобы ускорить работу расширения. Если в кластере предусмотрен отдельный координирующий узел, можно направлять все запросы только к нему. Для кластеров, в которых всего несколько узлов с известными адресами, целесообразно объявить эти узлы в конфигурации явно и сэкономить время на ненужном запросе.

Также в конфигурации нужно задать версию языка, который используется для работы с сервером. Значение параметра соответствует версии Elasticsearch. Для ветки 5.x параметр $dslVersion должен быть равен 5, для ветки 6.x - 6, для ветки 7.x - 7. Значение по умолчанию - 5.