현재 인터넷 시대에는 대용량 데이터가 폭발적으로 증가하면서 검색 엔진의 중요성이 더욱 커지고 있습니다. 확장성이 뛰어난 전체 텍스트 검색 엔진인 Elasticsearch는 점차 개발자가 검색 문제를 해결하는 첫 번째 선택이 되었습니다.
이 기사에서는 ThinkPHP6에서 Elasticsearch를 사용하여 데이터 검색 및 검색 기능을 구현하는 방법을 소개합니다. 시작해 보겠습니다.
1단계: elasticsearch-php 설치
작곡기를 사용하여 공식 elasticsearch-php 라이브러리를 설치합니다
composer require elasticsearch/elasticsearch
그 후 다음과 같이 구성lasticsearch.php 파일에 Elasticsearch 연결 구성 정보를 작성해야 합니다.
return [ 'host' => ['your.host.com'], 'port' => 9200, 'scheme' => 'http', 'user' => '', 'pass' => '' ];
참고하세요 여기에는 비밀번호가 없습니다. 연결이 안전한지 확인하려면 온라인으로 배포할 때 비밀번호를 추가하고 https를 사용하여 연결해야 합니다.
2단계: laravel-scout 설치
laravel-scout는 Laravel용 Eloquent ORM 전체 텍스트 검색 확장 패키지입니다. Elasticsearch 통합을 위해서는 다음 명령을 사용하여 설치해야 합니다.
composer require laravel/scout
3단계. : laravel-scout-elastic 패키지 설치
ThinkPHP6에서는 Elasticsearch와 연결을 위해 확장 패키지 laravel-scout-elastic을 사용해야 합니다. 마찬가지로 다음 명령을 사용하여 설치합니다.
composer require babenkoivan/scout-elasticsearch-driver:^7.0
app.php에서 scout 및 elastic 드라이버를 구성
return [ 'providers' => [ //... LaravelScoutScoutServiceProvider::class, ScoutElasticsearchElasticsearchServiceProvider::class, //... ], 'aliases' => [ //... 'Elasticsearch' => ScoutElasticsearchFacadesElasticsearch::class, //... ], ];
그런 다음 configscout.php에서 모델의 검색 엔진을 다음과 같이 구성합니다.
'searchable' => [ AppModelsModel::class => [ 'index' => 'model_index', 'type' => 'model_type' ], ],
위 구성은 우리가 Model::class 모델 객체를 사용하면 데이터를 검색하고 Model::class 객체에 해당하는 인덱스 이름을 model_index로, 유형을 model_type으로 정의합니다.
4단계: 검색 논리 정의
Model 클래스에서 Searchable 특성을 사용하고 다음과 같이 SearchableArray() 함수에 공개 함수를 선언합니다.
<?php namespace AppModels; use LaravelScoutSearchable; class Model extends Model { // 使用scout可搜索的trait use Searchable; // 返回可被搜索的模型数据 public function toSearchableArray() { return [ 'title' => $this->title, 'content' => $this->content ]; }
toSearchableArray() 함수는 검색 가능한 데이터 필드를 반환하는 데 사용됩니다. 여기서는 두 가지 예를 보여줍니다. 제목과 내용 필드가 제공됩니다.
5단계: 검색 관련 API
마지막으로 검색 결과 목록, 검색 통계 등 검색 관련 API를 작성합니다. 이를 위해서는 공식 Elasticsearch API에 대한 어느 정도 이해가 필요합니다. 자세한 내용은 공식 Elasticsearch 설명서를 참조하세요.
예를 들어 검색 결과 목록 API의 코드는 다음과 같습니다.
use ElasticsearchClientBuilder; class SearchController extends Controller { //搜索结果列表 public function list(Request $request) { $searchQuery = $request->input('q'); //搜索关键字 //搜索操作 $elasticsearch = ClientBuilder::create()->setHosts(config('elasticsearch.host'))->build(); $response = $elasticsearch->search([ 'index' => 'model_index', // 索引名称 'type' => 'model_type', // 类型 'size' => 1000, 'body' => [ 'query' => [ 'bool' => [ 'should' => [ ['match' => ['title' => $request->input('q')]], ['match' => ['content' => $request->input('q')]] ] ] ] ] ]); //格式化返回结果 $result = []; foreach ($response['hits']['hits'] as $hit) { //搜索评分 $hit['_score']; //搜索到的数据 $result[] = $hit['_source']; } return json_encode($result); } }
위 코드는 Elasticsearch에서 공식적으로 제공하는 ElasticsearchClientBuilder 클래스를 사용하여 연결을 생성하고 키워드를 쿼리하고 결과 목록을 검색합니다. 이 API의 $request->input('q')
를 원하는 키워드로 바꿀 수 있습니다.
이 기사는 기본적으로 Elasticsearch를 사용하여 검색 기능을 구현할 수 있다고 믿습니다. 실제로 문제가 발생하는 경우 공식 문서를 참조하거나 문제를 제기하여 추가 도움을 받으세요.
위 내용은 ThinkPHP6에서 Elasticsearch를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!