All Projects → sheerockoff → bitrix-elastic-indexer

sheerockoff / bitrix-elastic-indexer

Licence: Unlicense license
Индексация инфоблоков Bitrix в Elasticsearch

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to bitrix-elastic-indexer

bitrixtemplate stylish
Набор уроков по интеграции Bootstrap дизайна в 1С-Битрикс (набор демо-данных + шаблон 1C-Bitrix)
Stars: ✭ 39 (+69.57%)
Mutual labels:  bitrix
bitrix-module-tools
ООП Фреймворк разработки проектов на CMS Bitrix
Stars: ✭ 40 (+73.91%)
Mutual labels:  bitrix
bitrix-module-bunit
BUnit - фреймворк модульного тестрования для CMS Bitrix
Stars: ✭ 20 (-13.04%)
Mutual labels:  bitrix
bitrix-antispam
1C Bitrix anti-spam mod.
Stars: ✭ 10 (-56.52%)
Mutual labels:  bitrix
mvc.base
Базовый компонент Битрикс для простой реализации MVC
Stars: ✭ 14 (-39.13%)
Mutual labels:  bitrix
bitrix-i18n
The internationalization module for Bitrix CMS
Stars: ✭ 19 (-17.39%)
Mutual labels:  bitrix
demo.adminhelper
Example of a module created using Admin Helper
Stars: ✭ 30 (+30.43%)
Mutual labels:  bitrix
bxorder
OpenSource Bitrix Order
Stars: ✭ 62 (+169.57%)
Mutual labels:  bitrix
coffeediz.schema
Набор компонентов 1С-Битрикс для реализации микроразметки по схеме Schema.org
Stars: ✭ 14 (-39.13%)
Mutual labels:  bitrix
bitrix-memcached
Bitrix Cache with php-memcached / Кэш Битрикс на Memcached
Stars: ✭ 13 (-43.48%)
Mutual labels:  bitrix
bx-data
Удобные классы для 1C-Bitrix.
Stars: ✭ 24 (+4.35%)
Mutual labels:  bitrix
bitrix
Bitrix24 REST API client that doesn't suck. Suffer no more.
Stars: ✭ 59 (+156.52%)
Mutual labels:  bitrix
hlhelpers
Набор методов для работы с highloadblock 1С-Битрикс
Stars: ✭ 18 (-21.74%)
Mutual labels:  bitrix
bitrix-redis
Bitrix Cache with phpredis / Кэш Битрикс на Redis
Stars: ✭ 23 (+0%)
Mutual labels:  bitrix
bitrixclear
Чистый шаблон 1С-Битрикс / Clear template 1C-Bitrix
Stars: ✭ 20 (-13.04%)
Mutual labels:  bitrix
6umpukc
Тулинг для разработки сайтов и решений на Bitrix под Ubuntu/Windows
Stars: ✭ 13 (-43.48%)
Mutual labels:  bitrix

Bitrix Elasticsearch Indexer

PHPUnit Coverage Scrutinizer

Хелпер для индексации данных инфоблока 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
]);
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].