如何在ThinkPHP6中使用Elasticsearch

来源:undefined 2024-12-25 05:00:57 1012

在当前互联网时代,随着海量数据的爆炸式增长,搜索引擎变得越来越重要。而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-&gt;title,

content =&gt; $this-&gt;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-&gt;input(q); //搜索关键字

//搜索操作

$elasticsearch = ClientBuilder::create()-&gt;setHosts(config(elasticsearch.host))-&gt;build();

$response = $elasticsearch-&gt;search([

index =&gt; model_index, // 索引名称

type =&gt; model_type,   // 类型

size =&gt; 1000,

body =&gt; [

query =&gt; [

bool =&gt; [

should =&gt; [

[match =&gt; [title =&gt; $request-&gt;input(q)]],

[match =&gt; [content =&gt; $request-&gt;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中文网其它相关文章!

最新文章