Простой способ использовать официальный клиент Elastic Search в ваших приложениях Laravel или Lumen.
Установите текущую версию пакета mailerlite/laravel-elasticsearch
через композитор:
composer require mailerlite/laravel-elasticsearch
Если вы используете ElasticSearch версии 5, установите версию 2 этого пакета:
composer require mailerlite/laravel-elasticsearch:^2
Поставщик услуг пакета автоматически зарегистрирует своего поставщика услуг.
Опубликуйте файл конфигурации:
php artisan vendor:publish --provider= " MailerLiteLaravelElasticsearchServiceProvider "
После публикации файла конфигурации, как предложено выше, вы можете настроить ElasticSearch, добавив в файл .env
вашего приложения следующее (с соответствующими значениями):
ELASTICSEARCH_HOST =localhost
ELASTICSEARCH_PORT =9200
ELASTICSEARCH_SCHEME =http
ELASTICSEARCH_USER =
ELASTICSEARCH_PASS =
Если вы входите в систему через ключи API, вам необходимо будет заполнить следующие значения:
ELASTICSEARCH_API_ID =
ELASTICSEARCH_API_KEY =
Если вы подключаетесь к экземплярам ElasticSearch на Amazon AWS, вам также потребуется для composer require aws/aws-sdk-php:^3.80
и добавить следующее в ваш файл .env
:
AWS_ELASTICSEARCH_ENABLED =true
AWS_REGION =...
AWS_ACCESS_KEY_ID =...
AWS_SECRET_ACCESS_KEY =...
Если вам нужно использовать другой метод аутентификации с собственными учетными данными (например, instanceProfile()
), вам необходимо опубликовать файл конфигурации и использовать aws_credentials :
<?php
// config/elasticsearch.php
$ provider = Aws Credentials CredentialProvider:: instanceProfile ();
$ memoizedProvider = Aws Credentials CredentialProvider:: memoize ( $ provider );
$ credentials = $ memoizedProvider ()-> wait ();
. . .
' hosts ' => [
[
' host ' => env ( ' ELASTICSEARCH_HOST ' , ' localhost ' ),
// For local development, the default Elasticsearch port is 9200.
// If you are connecting to an Elasticsearch instance on AWS, you probably want to set this to null
' port ' => env ( ' ELASTICSEARCH_PORT ' , 9200 ),
' scheme ' => env ( ' ELASTICSEARCH_SCHEME ' , null ),
' user ' => env ( ' ELASTICSEARCH_USER ' , null ),
' pass ' => env ( ' ELASTICSEARCH_PASS ' , null ),
// If you are connecting to an Elasticsearch instance on AWS, you will need these values as well
' aws ' => env ( ' AWS_ELASTICSEARCH_ENABLED ' , false ),
' aws_region ' => env ( ' AWS_REGION ' , '' ),
' aws_key ' => env ( ' AWS_ACCESS_KEY_ID ' , '' ),
' aws_secret ' => env ( ' AWS_SECRET_ACCESS_KEY ' , '' )
' aws_credentials ' => $ credentials
],
],
Если у вас есть задание, которое выполняется в супервизоре, вам необходимо использовать замыкание. Таким образом, учетные данные будут обновлены во время выполнения.
<?php
// config/elasticsearch.php
$ provider = Aws Credentials CredentialProvider:: instanceProfile ();
$ memoizedProvider = Aws Credentials CredentialProvider:: memoize ( $ provider );
. . .
' hosts ' => [
[
...
' aws_credentials ' => $ memoizedProvider
],
],
Если вы используете php artisan config:cache
, вы не можете использовать замыкание в своем файле конфигурации, вызовите его так:
<?php
// config/elasticsearch.php
. . .
' hosts ' => [
[
...
' aws_credentials ' => [ Aws Credentials CredentialProvider::class, ' defaultProvider ' ],
],
],
Если вы работаете с Lumen, зарегистрируйте поставщика услуг и конфигурацию в bootstrap/app.php
:
$ app -> register ( MailerLite LaravelElasticsearch ServiceProvider::class);
$ app -> configure ( ' elasticsearch ' );
Вручную скопируйте файл конфигурации в свое приложение.
Фасад Elasticsearch
— это всего лишь точка входа в ES-клиент, поэтому раньше вы могли использовать:
use Elasticsearch ClientBuilder ;
$ data = [
' body ' => [
' testField ' => ' abc '
],
' index ' => ' my_index ' ,
' type ' => ' my_type ' ,
' id ' => ' my_id ' ,
];
$ client = ClientBuilder:: create ()-> build ();
$ return = $ client -> index ( $ data );
Теперь вы можете просто заменить эти две последние строки:
use Elasticsearch ;
$ return = Elasticsearch:: index ( $ data );
Это запустит команду в соединении по умолчанию. Вы можете запустить команду для любого соединения (см. параметр defaultConnection
и массив connections
в файле конфигурации).
$ return = Elasticsearch:: connection ( ' connectionName ' )-> index ( $ data );
Пользователи Lumen, желающие использовать Facades, могут сделать это, отредактировав файл bootstrap/app.php
, включив в него следующее:
$ app -> withFacades ( true , [
...
MailerLite LaravelElasticsearch Facade::class => ' Elasticsearch ' ,
...
]);
Пользователям Lumen, которые не используют фасады, потребуется использовать внедрение зависимостей или контейнер приложения, чтобы получить объект службы ES:
// using injection:
public function handle ( Mailerlite LaravelElasticsearch Manager $ elasticsearch )
{
$ elasticsearch -> ping ();
}
// using application container:
$ elasticSearch = $ this -> app ( ' elasticsearch ' );
Конечно, внедрение зависимостей и контейнер приложений работают и для приложений Laravel.
Поскольку пакет представляет собой оболочку официального клиента Elastic, с ним можно делать практически все. Вы можете не только выполнять стандартные операции CRUD, но и программно отслеживать состояние вашего кластера Elastic, выполнять его резервное копирование или вносить в него изменения. Некоторые из этих операций выполняются с помощью команд «в пространстве имен», которые этот пакет с радостью поддерживает.
Чтобы получить статистику по индексу:
$ stats = Elasticsearch:: indices ()-> stats ([ ' index ' => ' my_index ' ]);
$ stats = Elasticsearch:: nodes ()-> stats ();
$ stats = Elasticsearch:: cluster ()-> stats ();
Чтобы создавать и восстанавливать снимки (сначала прочтите документацию Elastic о создании путей к репозиторию и плагинов):
$ response = Elasticsearch:: snapshots ()-> create ( $ params );
$ response = Elasticsearch:: snapshots ()-> restore ( $ params );
Чтобы удалить целые индексы (будьте осторожны!):
$ response = Elasticsearch:: indices ()-> delete ([ ' index ' => ' my_index ' ]);
Помните, что этот пакет представляет собой тонкую оболочку большого количества очень сложных и хорошо документированных функций Elastic. Информацию об этих функциях, а также методах и параметрах, используемых для их вызова, можно найти в документации Elastic. Помощь по их использованию доступна на форумах Elastic и на таких сайтах, как Stack Overflow.
Этот пакет также предоставляет некоторые полезные консольные команды.
Проверьте, существует ли индекс:
php artisan laravel-elasticsearch:utils:index-exists < your_elasticsearch_index_name >
Создайте индекс:
php artisan laravel-elasticsearch:utils:index-create < your_elasticsearch_index_name >
Удалить индекс:
php artisan laravel-elasticsearch:utils:index-delete < your_elasticsearch_index_name >
Создайте или обновите сопоставление индекса. Примечание. Файл сопоставления индекса должен содержать допустимое определение сопоставления JSON, как ожидает Elasticsearch, например:
{
"body" : {
"_source" : {
"enabled" : true
},
"properties" : {
"id" : {
"type" : " keyword "
},
"property_1" : {
"type" : " text "
},
"property_2" : {
"type" : " text "
}
}
}
}
php artisan laravel-elasticsearch:utils:index-create-or-update-mapping < your_elasticsearch_index_name > < json_mapping_absolute_file_path >
Создает псевдоним:
php artisan laravel-elasticsearch:utils:alias-create < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
Удалить индекс из псевдонима:
php artisan laravel-elasticsearch:utils:alias-remove-index < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
Переключить индекс на псевдоним (полезно для выпуска нового индекса с нулевым временем простоя):
php artisan laravel-elasticsearch:utils:alias-switch-index < your_NEW_elasticsearch_index_name > < your_OLD_elasticsearch_index_name > < your_elasticsearch_alias_name >
Спасибо всем, кто внес свой вклад в этот проект!
Пожалуйста, используйте Github, чтобы сообщать об ошибках, а также оставлять комментарии и предложения.
См. CONTRIBUTING.md, чтобы узнать, как внести изменения.
laravel-elasticsearch был написан благодаря Колину Виброку и выпущен под лицензией MIT. Он поддерживается и развивается MailerLite.
Авторские права (c) 2023 MailerLite