Download the PHP package shader2k/search-indexer without Composer
On this page you can find all versions of the php package shader2k/search-indexer. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download shader2k/search-indexer
More information about shader2k/search-indexer
Files in shader2k/search-indexer
Informations about the package search-indexer
Elasticsearch zero downtime reindexing
Переиндексация модели с нулевым временем простоя
Установка
Установка через Composer
Настройка
Скопировать config файл в <projectRoot>/config/indexerconfig.php
Параметры конфигурации:
searchDriverFactoriesиdataProviderFactories- доступные в системе драйвера и провайдеры (можно расширять имеющиеся, указав алиасы и классы фабрик)searchDriverNameDefaultиdataProviderNameDefault- алиасы драйвера и провайдера по умолчаниюdataProviderChunkSizeразмер частей для получения данных из моделиelasticsearchHostхост поискового движка (ElasticSearch)
При необходимости можно разместить .env файл в корень проекта (.env.example)
Использование
Индексируемая модель должна обязательно имплементировать интерфейс \Indexable\IndexableContract
Реализуемые методы:
-
getIndexableFields()должен вернуть массив имен полей, которые небоходимо добавить в индекс -
getIdentifierField()должен вернуть имя поля, используемое в качестве ID -
getSearchDriverName()если метод вернет null, будет использован драйвер по умолчанию. Если указать имя драйвера, для индексирования будет использован этот драйвер -
getProviderName()имя провайдера. Используется аналогично методуgetSearchDriverName() -
getIndexName()имя индекса (должно быть уникально), напримерreturn __CLASS__; getIdentifierValue()значение ID, напримерreturn (string) $this->id;
В пакете присутствует трейт Traits\IndexableTrait, который можно использовать в моделях для использования драйвера и провайдера по умолчанию.
Использование сервиса в проекте
Инициализировать сервис желательно как синглтон
indexingModel()переиндексация всей модели. В данном случае будет создан новый индекс, в него проиндексируется модель, затем, атомарной операцией, старый индекс будет подменен новым.indexingEntity()добавить одну сущность в индексremoveEntity()удаление сущности из индекса
Добавление сервиса в проект на Laravel
В методе boot() AppServiceProvider.php нужно объявить сервис как синглтон
Использование сервиса:
Расширение пакета
Возможно расширение пакета за счет дополнительных драйверов для поисковых движков (например Sphinx, Elasticsearch) и провайдеров данных (например Eloquent, Doctrine)
Расширения можно найти по ссылкам: Драйвера для поисковых машин, Провайдеры данных
Добавление драйвера:
Необходимо реализовать интерфейс фабрики для драйвера DriverFactoryContract и интерфейс драйвера DriverContract.
Добавить новый драйвер в config:
При реализации метода prepareIndex драйвера, необходимо обеспечить бесперебойную работу старого индекса, в случае переиндексации всей модели
(на что указывает параметр $reindex со значением true).
После переиндексации - атомарной операцией подменить старый индекс на новый.
Аналогично можно расширить провайдеры, реализуя ProviderFactoryContract для фабрики и ProviderContract для провайдера.
Добавить новый провайдер в config:
All versions of search-indexer with dependencies
vlucas/phpdotenv Version ^3.6
hassankhan/config Version ^2.1
ext-json Version *