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 *