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

如何在ThinkPHP6中使用Elasticsearch

Jun 20, 2023 pm 12:09 PM
thinkphpelasticsearch使用教程

在當前網路時代,隨著大量資料的爆炸性成長,搜尋引擎變得越來越重要。而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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境