Appearance
Модуль для работы с ElasticSearch. realweb.api.elasticsearch
Совместимость
realweb.api v.6
Обновленная версия модуля
Модуль позволяет индексировать любые элементы на сайте и быстро искать по ним. Модуль предоставляет api для работы с elastic search. Может использоваться для:
- Поиска по сайту
- Реализации “умного фильтра” с возможностью показа недоступных фильтров и количества товаров
- Фильтрации товаров по фильтру в каталоге
Преимущество использования модуля в:
- Простоте реализации функциональности
- Быстроте работы
- Отсутствие ошибок работы (при правильно составленном индексе)
Модуль также позволяет добавить словарь синонимов (Например, для транслитерации поиска и т.п.) Все существующие индексы можно анализировать через сервис http://kibana.bitrix.dev.realweb.ru/
Установка и настройка
Linux
- скачать архив ES с
DEV/var/www/apps/elasticsearch-8.1.1-amd64.deb - проверка контрольной суммы
shell
shasum -a 512 -c elasticsearch-8.1.1-amd64.deb.sha512- установка
shell
sudo dpkg -i elasticsearch-8.1.1-amd64.deb- настройка конфигов
shell
nano /etc/elasticsearch/elasticsearch.yml- основные настройки
ini
network.host: localhost
http.port: 9200
xpack.security.enabled: false- ограничение использования MEM
shell
nano /etc/default/elasticsearch- основная настройка
ini
ES_JAVA_OPTS="-Xms2g -Xmx2g"- запуск сервиса
shell
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service- проверка
shell
curl -X GET http://localhost:9200/?prettyНастройка безопасности
Будет требоваться авторизации при запросах к ES, также это нужно, чтобы получить полные права в кибане
- изменения в конфиге
/etc/elasticsearch/elasticsearch.yml
ini
xpack.security.enabled: true
xpack.security.http.ssl:
enabled: false- сброс пароля
shell
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -f -i- проверка
shell
curl --user elastic:cxlQHE#z4zK*M5 -X GET "http://localhost:9200?pretty"Windows
Установка ES
- Скачать архив ES с
DEV/var/www/apps/elasticsearch-8.1.1-windows-x86_64.zip - Распаковать в удобную для себя папку
- Установка службу
cmd
elasticsearch-8.1.1\bin>elasticsearch-service.bat install- Настроить выделение памяти для службы
cmd
elasticsearch-8.1.1\bin>elasticsearch-service.bat managerВ открывшемся окне провести настройки

- Запустить службу По умолчанию сервис будет запущен на 9200 порту.
Официальная инструкция по установке
Установка Kibana
- скачать архив ES с
DEV/var/www/apps/kibana-8.1.1-windows-x86_64.zip - распаковать в удобную для себя папку
- запустить из командной строки
cmd
kibana-8.1.1\bin>kibana.batОфициальная инструкция по установке
Настройка Kibana как службы
- Скачать NSSM
- Выполнить
cmd
nssm install KibanaВ открывшемся окне указать путь к kibana.bat по аналогии с картинкой.

- Во вкладке Dependencies можно указать службу Elastic Search.
- Нажать Install Service.
- Запустить службу
После запуска kibana будет доступна в браузере по адресу http://localhost:5601
MacOs
Установка kibana
Установка и настройка Kibana
shell
sudo dpkg -i kibana-8.1.1-amd64.debзапуск сервиса
shell
sudo systemctl daemon-reload
sudo systemctl enable kibana.service
sudo systemctl start kibana.serviceпример конфига nginx
text
server {
listen 80;
server_name kibana.local;
#server_name server-ip-address;
#For autherntication remove the # from below two line:
#auth_basic "Restricted Access";
#auth_basic_user_file /etc/nginx/.htpasswd;
location / {
proxy_pass http://localhost:5601;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#upgrade to WebSocket protocol when requested
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}Если нужны полные права то необходимо выполнить следующие шаги
- сброс пароля (вход в кибану по elastic:cxlQHE#z4zK*M5)
shell
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system -f -i- конфигурация
ini
elasticsearch.username: "kibana_system"
elasticsearch.password: "cxlQHE#z4zK*M5"
xpack.encryptedSavedObjects.encryptionKey: "ключ_32_символа"- перезапуск сервиса
shell
systemctl restart kibanaВ случае возникновения ошибки Kibana server is not ready yet. удалить индексы кибаны
shell
curl http://localhost:9200/_aliases?pretty=true
curl -XDELETE http://localhost:9200/.kibana-event-log-8.1.1-000001Пример настройки конфигурации индекса
php
'settings' => array(
"analysis" => array(
"analyzer" => array(
"rebuilt_russian" => array(
"tokenizer" => "standard",
"filter" => array(
"lowercase",
"russian_stemmer",
"russian_stop",
"synonym"
)
)
),
"filter" => array(
"russian_stop" => array(
"type" => "stop",
"stopwords" => "_russian_"
),
"russian_stemmer" => array(
"type" => "stemmer",
"language" => "russian"
),
"synonym" => array(
"type" => "synonym",
"ignore_case" => "true",
"synonyms_path" => "analysis/synonym.txt"
)
)
)
),Пример настройки данных индекса
php
array(
'name' => 'Karamelka Каталог фильтр',
'code' => 'karamelka_catalog_filter',
'settings' => array(
'number_of_replicas' => 1,
'number_of_shards' => 1
),
'properties' => array(
array(
'name' => 'Раздел',
'code' => 'SECTION_ID',
'settings' => array("type" => 'integer')
),
array(
'name' => 'Цена',
'code' => 'PRICE',
'settings' => array("type" => 'float')
),
array(
'name' => 'Бренд',
'code' => 'BRAND',
'settings' => array("type" => 'integer')
),
array(
'name' => 'Страна',
'code' => 'COUNTRY',
'settings' => array("type" => 'integer')
),
)
)Добавление данных в индекс
При добавлении данных стоит очистить от html тегов. Регистр можно не менять - поиск регистронезависимый
php
$obItem = new \Realweb\Api\Module\Elasticsearch\Model\Search\Item('index_name', $iItemId);
$obItem->setData(array(
'section_id'=>array(1,2),
'title' => 'test',
'body' => 'test',
'property_1'=>array(1,2,3),
'property_2'=>array('value1','value2','value3'),
));
$obItem->save();Поиск
php
$obNav = new \Realweb\Api\Model\Main\Pagination();
$obNav->setParam('index', 'index_name');
$obNav->setParam('sort', array(
'PRICE' => 'desc'
));
$obNav->setParam('filter', array(
'BRAND' => array(1, 2),
'COUNTRY' => 1,
'SECTION_ID' => array(1, 2, 3),
'PRICE' => array(
'min' => 0,
'max' => 400
)
));
$obCollection = \Realweb\Api\Module\Elasticsearch\Model\Helper::getInstance()->filter($obNav);Поиск по всем ключевым словам
php
$obNav = new \Realweb\Api\Model\Main\PageNavigation();
$obNav->setParam('index', 'karamelka_catalog');
$obNav->setParam('query', 'test');
\Realweb\Api\Module\Elasticsearch\Model\Helper::getInstance()->search($obNav);Поиск с учетом приоритета ключевых полей и без возврата индексируемых данных (source)
php
$obNav = new \Realweb\Api\Model\Main\PageNavigation();
$obNav->setParam('index', 'karamelka_catalog');
$obNav->setParam('query', 'test');
$obNav->setParam('multi_match', true);
$obNav->setParam('source', array('none'));
\Realweb\Api\Module\Elasticsearch\Model\Helper::getInstance()->search($obNav);Получение фильтров
php
$obNav->setParam('filter', array(
'section_id'=>1,
));
$obElasticCollection = \Realweb\Api\Module\Elasticsearch\Model\Helper::getInstance()->aggregation($obNav);Синонимы
Для использования синонимов необходимо добавить в настройки секцию synonym, где нужно указать путь к файлу с синонимами относительно директории конфига /etc/elasticsearch/elasticsearch.yml т.е. /etc/elasticsearch/ в директории должна быть символьная ссылка на директорию в проекте, где расположен файл с синонимами