首頁 > php框架 > ThinkPHP > 如何在ThinkPHP6中使用Elasticsearch

如何在ThinkPHP6中使用Elasticsearch

王林
發布: 2023-06-20 12:09:39
原創
2874 人瀏覽過

在當前網路時代,隨著大量資料的爆炸性成長,搜尋引擎變得越來越重要。而Elasticsearch作為一個高度可擴展的全文搜尋引擎,已經逐漸成為開發者解決搜尋問題的首選。
本文將介紹如何在ThinkPHP6中使用Elasticsearch來實現資料檢索和搜尋功能,讓我們開始吧。

第一步:安裝elasticsearch-php
使用composer安裝官方提供的elasticsearch-php庫

composer require elasticsearch/elasticsearch
登入後複製

之後我們需要在configelasticsearch.php檔案中書寫Elasticsearch連接配置信息,如下:

return [
    'host' => ['your.host.com'],
    'port' => 9200,
    'scheme' => 'http',
    'user' => '',
    'pass' => ''
];
登入後複製

注意的是這裡沒有密碼,在線上部署時需要添加密碼並使用https方式連接,確保連接是安全的。

第二步:安裝laravel-scout
laravel-scout是Laravel的一個Eloquent ORM全文搜尋擴充包,我們需要在ThinkPHP6中安裝它來實現Elasticsearch的集成,使用下面的命令安裝:

composer require laravel/scout
登入後複製

第三步:安裝laravel-scout-elastic套件
在ThinkPHP6中,我們需要使用擴充包laravel-scout-elastic以實現與Elasticsearch的連接。同樣地,使用下面的命令安裝:

composer require babenkoivan/scout-elasticsearch-driver:^7.0
登入後複製

在app.php中配置scout和elastic driver

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。

第四步:定義搜尋邏輯
我們在Model類別中使用Searchable trait並宣告一個public function toSearchableArray()函數,如下:

<?php

namespace AppModels;

use LaravelScoutSearchable;

class Model extends Model
{
    // 使用scout可搜索的trait
    use Searchable;
    
    // 返回可被搜索的模型数据
    public function toSearchableArray()
    {
        return [
            'title' => $this->title,
            'content' => $this->content
        ];
    }
登入後複製

toSearchableArray()函數用於傳回可被搜尋的資料字段,這裡我們例舉了標題和內容兩個字段。

第五步:搜尋相關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實現搜尋功能了。若您在實務上遇到問題,請參考官方文件或提issue以獲得更多協助。

以上是如何在ThinkPHP6中使用Elasticsearch的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板