วิธีง่ายๆ ในการใช้ไคลเอนต์ 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 ' );
แน่นอนว่า Dependency Injection และ Application Container ก็ใช้ได้กับแอพพลิเคชั่น 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 เขียนขึ้นโดย Colin Viebrock และเผยแพร่ภายใต้ใบอนุญาต MIT มันถูกดูแลรักษาและพัฒนาโดย MailerLite
ลิขสิทธิ์ (c) 2023 MailerLite