如何在ThinkPHP6中使用Elasticsearch

在当前互联网时代,随着海量数据的爆炸式增长,搜索引擎变得越来越重要。而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的集成,使用下面的命令安装:

立即学习“PHP免费学习笔记(深入)”;

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()函数,如下:

 $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的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/191324.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月1日 13:14:09
下一篇 2025年11月1日 13:14:41

相关推荐

发表回复

登录后才能评论
关注微信