在当前互联网时代,随着海量数据的爆炸式增长,搜索引擎变得越来越重要。而elasticsearch作为一个高度可扩展的全文搜索引擎,已经逐渐成为开发者们解决搜索问题的首选。
本文将介绍如何在thinkphp6中使用elasticsearch来实现数据检索和搜索功能,让我们开始吧。第一步:安装elasticsearch-php
使用composer安装官方提供的elasticsearch-php库1
composer require elasticsearch/elasticsearch
之后我们需要在configelasticsearch.php文件中书写Elasticsearch连接配置信息,如下:
1
2
3
4
5
6
7
return [
host => [your.host.com],
port => 9200,
scheme => http,
user => ,
pass =>
];
注意的是这里没有密码,在线上部署时需要添加密码并使用https方式连接,确保连接是安全的。
第二步:安装laravel-scout
laravel-scout是Laravel的一个Eloquent ORM全文搜索扩展包,我们需要在ThinkPHP6中安装它来实现Elasticsearch的集成,使用下面的命令安装:1
composer require laravel/scout
第三步:安装laravel-scout-elastic包
在ThinkPHP6中,我们需要使用扩展包laravel-scout-elastic以实现与Elasticsearch的连接。同样地,使用下面的命令安装:1
composer require babenkoivan/scout-elasticsearch-driver:^7.0
在app.php中配置scout和elastic driver
1
2
3
4
5
6
7
8
9
10
11
12
13
return [
providers => [
//...
LaravelScoutScoutServiceProvider::class,
ScoutElasticsearchElasticsearchServiceProvider::class,
//...
],
aliases => [
//...
Elasticsearch => ScoutElasticsearchFacadesElasticsearch::class,
//...
],
];
接着,在configscout.php中配置模型的搜索引擎,如下:
1
2
3
4
5
6
searchable => [
AppModelsModel::class => [
index => model_index,
type => model_type
],
],
以上配置表明我们使用Model::class 模型对象检索数据,定义Model::class对象对应的索引名称为model_index ,类型为model_type。
第四步:定义搜索逻辑
我们在Model类中使用Searchable trait并声明一个public function toSearchableArray()函数,如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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 的代码可能如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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中文网其它相关文章!