Eine einfache Möglichkeit, den offiziellen Elastic Search-Client in Ihren Laravel- oder Lumen-Anwendungen zu verwenden.
Installieren Sie die aktuelle Version des Pakets mailerlite/laravel-elasticsearch
über Composer:
composer require mailerlite/laravel-elasticsearch
Wenn Sie ElasticSearch Version 5 verwenden, installieren Sie Version 2 dieses Pakets:
composer require mailerlite/laravel-elasticsearch:^2
Der Dienstanbieter des Pakets registriert seinen Dienstanbieter automatisch.
Veröffentlichen Sie die Konfigurationsdatei:
php artisan vendor:publish --provider= " MailerLiteLaravelElasticsearchServiceProvider "
Nachdem Sie die Konfigurationsdatei wie oben vorgeschlagen veröffentlicht haben, können Sie ElasticSearch konfigurieren, indem Sie Folgendes zur .env
Datei Ihrer Anwendung hinzufügen (mit entsprechenden Werten):
ELASTICSEARCH_HOST =localhost
ELASTICSEARCH_PORT =9200
ELASTICSEARCH_SCHEME =http
ELASTICSEARCH_USER =
ELASTICSEARCH_PASS =
Wenn Sie sich über API-Schlüssel anmelden, müssen Sie diese Werte eingeben:
ELASTICSEARCH_API_ID =
ELASTICSEARCH_API_KEY =
Wenn Sie eine Verbindung zu ElasticSearch-Instanzen auf Amazon AWS herstellen, müssen Sie außerdem composer require aws/aws-sdk-php:^3.80
und Folgendes zu Ihrer .env
Datei hinzufügen:
AWS_ELASTICSEARCH_ENABLED =true
AWS_REGION =...
AWS_ACCESS_KEY_ID =...
AWS_SECRET_ACCESS_KEY =...
Wenn Sie eine andere Authentifizierungsmethode mit benutzerdefinierten Anmeldeinformationen verwenden müssen (z. B. instanceProfile()
), müssen Sie die Konfigurationsdatei veröffentlichen und die aws_credentials verwenden:
<?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
],
],
Wenn Sie einen Job haben, der im Supervisor ausgeführt wird, müssen Sie den Abschluss verwenden. Auf diese Weise werden die Anmeldeinformationen zur Laufzeit erneuert.
<?php
// config/elasticsearch.php
$ provider = Aws Credentials CredentialProvider:: instanceProfile ();
$ memoizedProvider = Aws Credentials CredentialProvider:: memoize ( $ provider );
. . .
' hosts ' => [
[
...
' aws_credentials ' => $ memoizedProvider
],
],
Wenn Sie php artisan config:cache
verwenden, können Sie den Abschluss nicht in Ihrer Konfigurationsdatei haben. Rufen Sie ihn folgendermaßen auf:
<?php
// config/elasticsearch.php
. . .
' hosts ' => [
[
...
' aws_credentials ' => [ Aws Credentials CredentialProvider::class, ' defaultProvider ' ],
],
],
Wenn Sie mit Lumen arbeiten, registrieren Sie bitte den Dienstanbieter und die Konfiguration in bootstrap/app.php
:
$ app -> register ( MailerLite LaravelElasticsearch ServiceProvider::class);
$ app -> configure ( ' elasticsearch ' );
Kopieren Sie die Konfigurationsdatei manuell in Ihre Anwendung.
Die Elasticsearch
Fassade ist lediglich ein Einstiegspunkt in den ES-Client. Sie haben daher möglicherweise zuvor Folgendes verwendet:
use Elasticsearch ClientBuilder ;
$ data = [
' body ' => [
' testField ' => ' abc '
],
' index ' => ' my_index ' ,
' type ' => ' my_type ' ,
' id ' => ' my_id ' ,
];
$ client = ClientBuilder:: create ()-> build ();
$ return = $ client -> index ( $ data );
Sie können die letzten beiden Zeilen jetzt einfach durch Folgendes ersetzen:
use Elasticsearch ;
$ return = Elasticsearch:: index ( $ data );
Dadurch wird der Befehl über die Standardverbindung ausgeführt. Sie können einen Befehl für jede Verbindung ausführen (siehe die Einstellung defaultConnection
und das connections
in der Konfigurationsdatei).
$ return = Elasticsearch:: connection ( ' connectionName ' )-> index ( $ data );
Lumen-Benutzer, die Facades verwenden möchten, können dies tun, indem sie die Datei bootstrap/app.php
so bearbeiten, dass sie Folgendes enthält:
$ app -> withFacades ( true , [
...
MailerLite LaravelElasticsearch Facade::class => ' Elasticsearch ' ,
...
]);
Lumen-Benutzer, die keine Fassaden verwenden, müssen die Abhängigkeitsinjektion oder den Anwendungscontainer verwenden, um das ES-Dienstobjekt zu erhalten:
// using injection:
public function handle ( Mailerlite LaravelElasticsearch Manager $ elasticsearch )
{
$ elasticsearch -> ping ();
}
// using application container:
$ elasticSearch = $ this -> app ( ' elasticsearch ' );
Natürlich funktionieren die Abhängigkeitsinjektion und der Anwendungscontainer auch für Laravel-Anwendungen.
Da es sich bei dem Paket um eine Hülle um den offiziellen Elastic-Client handelt, können Sie mit diesem Paket so ziemlich alles machen. Sie können nicht nur Standard-CRUD-Vorgänge ausführen, sondern auch den Zustand Ihres Elastic-Clusters programmgesteuert überwachen, ihn sichern oder Änderungen daran vornehmen. Einige dieser Vorgänge werden über „namespaced“-Befehle ausgeführt, die dieses Paket gerne unterstützt.
So rufen Sie Statistiken für einen Index ab:
$ stats = Elasticsearch:: indices ()-> stats ([ ' index ' => ' my_index ' ]);
$ stats = Elasticsearch:: nodes ()-> stats ();
$ stats = Elasticsearch:: cluster ()-> stats ();
So erstellen und wiederherstellen Sie Snapshots (lesen Sie zuerst die Elastic-Dokumente zum Erstellen von Repository-Pfaden und Plugins):
$ response = Elasticsearch:: snapshots ()-> create ( $ params );
$ response = Elasticsearch:: snapshots ()-> restore ( $ params );
Um ganze Indizes zu löschen (Vorsicht!):
$ response = Elasticsearch:: indices ()-> delete ([ ' index ' => ' my_index ' ]);
Bitte bedenken Sie, dass es sich bei diesem Paket um eine dünne Hülle um eine große Anzahl sehr ausgefeilter und gut dokumentierter Elastic-Funktionen handelt. Informationen zu diesen Funktionen sowie den Methoden und Parametern, mit denen sie aufgerufen werden, finden Sie in der Elastic-Dokumentation. Hilfe bei der Verwendung erhalten Sie in den Elastic-Foren und auf Websites wie Stack Overflow.
Dieses Paket stellt auch einige nützliche Konsolenbefehle bereit.
Prüfen Sie, ob ein Index vorhanden ist:
php artisan laravel-elasticsearch:utils:index-exists < your_elasticsearch_index_name >
Erstellen Sie einen Index:
php artisan laravel-elasticsearch:utils:index-create < your_elasticsearch_index_name >
Einen Index löschen:
php artisan laravel-elasticsearch:utils:index-delete < your_elasticsearch_index_name >
Indexzuordnung erstellen oder aktualisieren: Hinweis: Die Indexzuordnungsdatei muss eine gültige JSON-Zuordnungsdefinition enthalten, wie Elasticsearch es erwartet, zum Beispiel:
{
"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 >
Erstellt einen Alias:
php artisan laravel-elasticsearch:utils:alias-create < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
Index von einem Alias entfernen:
php artisan laravel-elasticsearch:utils:alias-remove-index < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
Index auf Alias umschalten (nützlich für die ausfallfreie Veröffentlichung des neuen Index):
php artisan laravel-elasticsearch:utils:alias-switch-index < your_NEW_elasticsearch_index_name > < your_OLD_elasticsearch_index_name > < your_elasticsearch_alias_name >
Vielen Dank an alle, die zu diesem Projekt beigetragen haben!
Bitte verwenden Sie Github, um Fehler zu melden und Kommentare oder Vorschläge zu machen.
Informationen zum Einbringen von Änderungen finden Sie unter CONTRIBUTING.md.
laravel-elasticsearch wurde dank Colin Viebrock geschrieben und wird unter der MIT-Lizenz veröffentlicht. Es wird von MailerLite gepflegt und weiterentwickelt
Copyright (c) 2023 MailerLite