在 Laravel 或 Lumen 應用程式中使用官方 Elastic Search 用戶端的簡單方法。

透過composer安裝目前版本的mailerlite/laravel-elasticsearch套件:
composer require mailerlite/laravel-elasticsearch如果您使用的是 ElasticSearch 版本 5,請安裝此軟體包的版本 2:
composer require mailerlite/laravel-elasticsearch:^2包的服務提供者將自動註冊其服務提供者。
發布設定檔:
php artisan vendor:publish --provider= " MailerLiteLaravelElasticsearchServiceProvider " 在遵循上面的建議發布設定檔後,您可以透過將以下內容新增至應用程式的.env檔案(使用適當的值)來設定 ElasticSearch:
ELASTICSEARCH_HOST =localhost
ELASTICSEARCH_PORT =9200
ELASTICSEARCH_SCHEME =http
ELASTICSEARCH_USER =
ELASTICSEARCH_PASS =如果您透過 API 金鑰登錄,則需要填寫以下值:
ELASTICSEARCH_API_ID =
ELASTICSEARCH_API_KEY =如果您要連接到 Amazon AWS 上的 ElasticSearch 實例,那麼您還需要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 );希望使用 Facades 的 Lumen 用戶可以透過編輯bootstrap/app.php檔案來添加以下內容:
$ app -> withFacades ( true , [
...
MailerLite LaravelElasticsearch Facade::class => ' Elasticsearch ' ,
...
]);不使用 Facades 的 Lumen 使用者需要使用依賴注入或應用程式容器來取得 ES 服務物件:
// using injection:
public function handle ( Mailerlite LaravelElasticsearch Manager $ elasticsearch )
{
$ elasticsearch -> ping ();
}
// using application container:
$ elasticSearch = $ this -> app ( ' elasticsearch ' );當然,依賴注入和應用程式容器也適用於 Laravel 應用程式。
因為該包是官方 Elastic 客戶端的包裝器,所以您可以使用該包做幾乎任何事情。您不僅可以執行標準的 CRUD 操作,還可以透過程式監控彈性叢集的運作狀況、對其進行備份或進行變更。其中一些操作是透過「命名空間」命令完成的,這個套件很高興能支援這些命令。
若要取得索引的統計資料:
$ 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 >建立或更新索引映射:注意:索引映射檔案必須包含 Elasticsearch 期望的有效 JSON 映射定義,例如:
{
"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