如何在ThinkPHP6中使用Elasticsearch
发布时间 - 2023-06-20 00:00:00 点击率:次在当前互联网时代,随着海量数据的爆炸式增长,搜索引擎变得越来越重要。而elasticsearch作为一个高度可扩展的全文搜索引擎,已经逐渐成为开发者们解决搜索问题的首选。
本文将介绍如何在thinkphp6中使用elasticsearch来实现数据检索和搜索功能,让我们开始吧。
第一步:安装elasticsearch-php
使用c
omposer安装官方提供的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()函数,如下:
$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以获得更多帮助。
# thinkphp
# php
# laravel
# composer
# class
# public
# function
# 对象
# input
# elasticsearch
# https
# 搜索引擎
# issue
# 搜索结果
# 搜索功能
# 的是
# 文档
# 互联网
# 你可以
# 让我们
# 有一定
# 线上
# 作为一个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
网站建设要注意的标准 促进网站用户好感度!
如何在宝塔面板中修改默认建站目录?
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
javascript中闭包概念与用法深入理解
如何利用DOS批处理实现定时关机操作详解
PythonWeb开发入门教程_Flask快速构建Web应用
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Laravel怎么清理缓存_Laravel optimize clear命令详解
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
WordPress 子目录安装中正确处理脚本路径的完整指南
如何批量查询域名的建站时间记录?
Laravel如何处理异常和错误?(Handler示例)
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
如何快速配置高效服务器建站软件?
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
bootstrap日历插件datetimepicker使用方法
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
EditPlus中的正则表达式 实战(1)
如何在IIS中新建站点并配置端口与IP地址?
如何快速搭建自助建站会员专属系统?
在centOS 7安装mysql 5.7的详细教程
网站页面设计需要考虑到这些问题
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何在企业微信快速生成手机电脑官网?
详解jQuery中的事件
如何在宝塔面板创建新站点?
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
如何在云服务器上快速搭建个人网站?
如何在服务器上三步完成建站并提升流量?
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Bootstrap整体框架之CSS12栅格系统
Laravel模型事件有哪些_Laravel Model Event生命周期详解
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
EditPlus中的正则表达式实战(5)
如何在万网主机上快速搭建网站?
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
高防服务器租用指南:配置选择与快速部署攻略
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
如何快速查询网站的真实建站时间?

