ThinkPHP6에서 Elasticsearch를 사용하는 방법

王林
풀어 주다: 2023-06-20 12:09:39
원래의
2849명이 탐색했습니다.

현재 인터넷 시대에는 대용량 데이터가 폭발적으로 증가하면서 검색 엔진의 중요성이 더욱 커지고 있습니다. 확장성이 뛰어난 전체 텍스트 검색 엔진인 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿