sheerockoff/bitrix-elastic-indexer
最新稳定版本:v0.1.5
Composer 安装命令:
composer require sheerockoff/bitrix-elastic-indexer
包简介
Bitrix infoblocks indexer into Elasticsearch.
README 文档
README
Хелпер для индексации данных инфоблока Bitrix в Elasticsearch.
Установка
composer require sheerockoff/bitrix-elastic-indexer
Быстрый старт
Подключаем зависимости, создаём клиент Elasticsearch.
<?php use Elasticsearch\ClientBuilder; use Sheerockoff\BitrixElastic\Indexer; require 'vendor/autoload.php'; $elastic = ClientBuilder::create()->setHosts(['http://elasticsearch:9200'])->build();
Создаём экземпляр Indexer.
$indexer = new Indexer($elastic);
По-умолчанию методы Indexer выбрасывают исключения при ошибках. Чтобы игнорировать некоторые исключения, необходимо
передать false вторым аргументом (strictMode) конструктора.
$indexer = new Indexer($elastic, false);
Получаем карту индекса для инфоблока.
$infoBlockMapping = $indexer->getInfoBlockMapping($iBlockId);
Обновляем карту индекса в Elasticsearch. Метод обновит карту только тех свойств, которые отсутствуют в текущем индексе. Карты существующих свойств в индексе изменяться не будут, чтобы избежать ошибок.
$indexer->putMapping('goods', $infoBlockMapping);
Получаем текущую карту индекса из Elasticsearch.
$elasticMapping = $indexer->getMapping('goods');
Получаем сырые данные индекса для элемента.
/** @var _CIBElement $element */ $rawData = $indexer->getElementRawData($element);
Нормализуем сырые данные индекса в соответствии с картой индекса Elasticsearch.
$normalizedData = $indexer->normalizeData($elasticMapping, $rawData);
Сохраняем данные в индексе Elasticsearch.
$indexer->put('goods', $id, $normalizedData);
Ищем по индексу используя фильтры в формате похожем на формат Bitrix.
$response = $indexer->search('goods', [ 'IBLOCK_ID' => 1, 'SECTION_CODE' => 'mobile', 'INCLUDE_SUBSECTIONS' => 'Y', 'ACTIVE' => 'Y', '>CATALOG_PRICE_1' => 0, '>CATALOG_STORE_AMOUNT_1' => 0, 'PROPERTY_TAGS' => ['hit', 'sale'] ]);
Для сортировки также используется формат похожий на формат Bitrix.
$response = $indexer->search('goods', ['ACTIVE' => 'Y'], [ 'CATALOG_PRICE_1' => 'ASC', 'ID' => 'DESC' ]);
Пагинацию и другие параметры запроса можно указать в последнем аргументе метода search.
$response = $indexer->search('goods', ['ACTIVE' => 'Y'], ['ID' => 'ASC'], [ 'from' => 40, 'size' => 20 ]);
Разработка и тестирование
Запуск тестов в контейнерах Docker:
docker compose up -d docker compose exec bitrix composer install docker compose exec bitrix vendor/bin/phpunit
统计信息
- 总下载量: 1.78k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 30
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: Unlicense
- 更新时间: 2019-07-12