Cara mudah untuk menggunakan klien Elastic Search resmi di aplikasi Laravel atau Lumen Anda.
Instal versi paket mailerlite/laravel-elasticsearch
saat ini melalui composer:
composer require mailerlite/laravel-elasticsearch
Jika Anda menggunakan ElasticSearch versi 5, instal versi 2 paket ini:
composer require mailerlite/laravel-elasticsearch:^2
Penyedia layanan paket akan secara otomatis mendaftarkan penyedia layanannya.
Publikasikan file konfigurasi:
php artisan vendor:publish --provider= " MailerLiteLaravelElasticsearchServiceProvider "
Setelah Anda mempublikasikan file konfigurasi seperti yang disarankan di atas, Anda dapat mengonfigurasi ElasticSearch dengan menambahkan yang berikut ini ke file .env
aplikasi Anda (dengan nilai yang sesuai):
ELASTICSEARCH_HOST =localhost
ELASTICSEARCH_PORT =9200
ELASTICSEARCH_SCHEME =http
ELASTICSEARCH_USER =
ELASTICSEARCH_PASS =
Jika Anda masuk melalui kunci API, Anda harus mengisi nilai berikut:
ELASTICSEARCH_API_ID =
ELASTICSEARCH_API_KEY =
Jika Anda terhubung ke instans ElasticSearch di Amazon AWS, Anda juga perlu composer require aws/aws-sdk-php:^3.80
dan menambahkan yang berikut ini ke file .env
Anda:
AWS_ELASTICSEARCH_ENABLED =true
AWS_REGION =...
AWS_ACCESS_KEY_ID =...
AWS_SECRET_ACCESS_KEY =...
Jika Anda harus menggunakan metode autentikasi lain yang memiliki kredensial khusus (yaitu instanceProfile()
), Anda harus mempublikasikan file konfigurasi dan menggunakan 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
],
],
Jika Anda memiliki pekerjaan yang berjalan di supervisor, Anda harus menggunakan Penutupan. Dengan cara ini kredensial akan diperbarui saat runtime.
<?php
// config/elasticsearch.php
$ provider = Aws Credentials CredentialProvider:: instanceProfile ();
$ memoizedProvider = Aws Credentials CredentialProvider:: memoize ( $ provider );
. . .
' hosts ' => [
[
...
' aws_credentials ' => $ memoizedProvider
],
],
Jika Anda menggunakan php artisan config:cache
, Anda tidak dapat memiliki Penutupan di file konfigurasi Anda, sebut saja seperti ini:
<?php
// config/elasticsearch.php
. . .
' hosts ' => [
[
...
' aws_credentials ' => [ Aws Credentials CredentialProvider::class, ' defaultProvider ' ],
],
],
Jika Anda bekerja dengan Lumen, silakan daftarkan penyedia layanan dan konfigurasinya di bootstrap/app.php
:
$ app -> register ( MailerLite LaravelElasticsearch ServiceProvider::class);
$ app -> configure ( ' elasticsearch ' );
Salin file konfigurasi ke aplikasi Anda secara manual.
Fasad Elasticsearch
hanyalah titik masuk ke klien ES, jadi sebelumnya Anda mungkin pernah menggunakan:
use Elasticsearch ClientBuilder ;
$ data = [
' body ' => [
' testField ' => ' abc '
],
' index ' => ' my_index ' ,
' type ' => ' my_type ' ,
' id ' => ' my_id ' ,
];
$ client = ClientBuilder:: create ()-> build ();
$ return = $ client -> index ( $ data );
Anda sekarang dapat mengganti dua baris terakhir tersebut dengan sederhana:
use Elasticsearch ;
$ return = Elasticsearch:: index ( $ data );
Itu akan menjalankan perintah pada koneksi default. Anda dapat menjalankan perintah pada koneksi apa pun (lihat pengaturan defaultConnection
dan array connections
di file konfigurasi).
$ return = Elasticsearch:: connection ( ' connectionName ' )-> index ( $ data );
Pengguna Lumen yang ingin menggunakan Fasad dapat melakukannya dengan mengedit file bootstrap/app.php
untuk menyertakan yang berikut:
$ app -> withFacades ( true , [
...
MailerLite LaravelElasticsearch Facade::class => ' Elasticsearch ' ,
...
]);
Pengguna Lumen yang tidak menggunakan fasad perlu menggunakan injeksi ketergantungan atau kontainer aplikasi untuk mendapatkan objek layanan ES:
// using injection:
public function handle ( Mailerlite LaravelElasticsearch Manager $ elasticsearch )
{
$ elasticsearch -> ping ();
}
// using application container:
$ elasticSearch = $ this -> app ( ' elasticsearch ' );
Tentu saja, injeksi ketergantungan dan container aplikasi juga berfungsi untuk aplikasi Laravel.
Karena paket ini merupakan pembungkus klien Elastic resmi, Anda dapat melakukan hampir semua hal dengan paket ini. Anda tidak hanya dapat melakukan operasi CRUD standar, namun Anda juga dapat memantau kesehatan klaster Elastic Anda secara terprogram, mencadangkannya, atau membuat perubahan padanya. Beberapa operasi ini dilakukan melalui perintah "namespaced", yang dengan senang hati didukung oleh paket ini.
Untuk mengambil statistik indeks:
$ stats = Elasticsearch:: indices ()-> stats ([ ' index ' => ' my_index ' ]);
$ stats = Elasticsearch:: nodes ()-> stats ();
$ stats = Elasticsearch:: cluster ()-> stats ();
Untuk membuat dan memulihkan snapshot (baca dokumen Elastic tentang membuat jalur repositori dan plugin terlebih dahulu):
$ response = Elasticsearch:: snapshots ()-> create ( $ params );
$ response = Elasticsearch:: snapshots ()-> restore ( $ params );
Untuk menghapus seluruh indeks (hati-hati!):
$ response = Elasticsearch:: indices ()-> delete ([ ' index ' => ' my_index ' ]);
Harap diingat bahwa paket ini merupakan pembungkus tipis seputar sejumlah besar fitur Elastic yang sangat canggih dan terdokumentasi dengan baik. Informasi tentang fitur tersebut serta metode dan parameter yang digunakan untuk memanggilnya dapat ditemukan di dokumentasi Elastic. Bantuan untuk menggunakannya tersedia melalui forum Elastic dan di situs seperti Stack Overflow.
Paket ini juga menyediakan beberapa perintah konsol yang berguna.
Periksa apakah ada indeks:
php artisan laravel-elasticsearch:utils:index-exists < your_elasticsearch_index_name >
Buat indeks:
php artisan laravel-elasticsearch:utils:index-create < your_elasticsearch_index_name >
Hapus indeks:
php artisan laravel-elasticsearch:utils:index-delete < your_elasticsearch_index_name >
Membuat atau memperbarui pemetaan indeks: Catatan: File pemetaan indeks harus berisi definisi pemetaan JSON yang valid seperti yang diharapkan Elasticsearch, misalnya:
{
"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 >
Membuat alias:
php artisan laravel-elasticsearch:utils:alias-create < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
Hapus indeks dari alias:
php artisan laravel-elasticsearch:utils:alias-remove-index < your_elasticsearch_index_name > < your_elasticsearch_alias_name >
Mengaktifkan indeks pada alias (berguna untuk rilis indeks baru tanpa waktu henti):
php artisan laravel-elasticsearch:utils:alias-switch-index < your_NEW_elasticsearch_index_name > < your_OLD_elasticsearch_index_name > < your_elasticsearch_alias_name >
Terima kasih kepada semua orang yang telah berkontribusi pada proyek ini!
Silakan gunakan Github untuk melaporkan bug, dan memberikan komentar atau saran.
Lihat CONTRIBUTING.md untuk mengetahui cara berkontribusi terhadap perubahan.
laravel-elasticsearch ditulis berkat Colin Viebrock dan dirilis di bawah Lisensi MIT. Itu dipelihara dan dikembangkan oleh MailerLite
Hak Cipta (c) 2023 MailerLite