Laravel 또는 Lumen 애플리케이션에서 공식 Elastic Search 클라이언트를 사용하는 쉬운 방법입니다.
작성기를 통해 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 ' ,
...
]);
Facade를 사용하지 않는 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 >
인덱스 매핑 생성 또는 업데이트: 참고: 인덱스 매핑 파일에는 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