Laravel中如何使用ES

composer 安装 es 扩展

安装

1
composer require elasticsearch/elasticsearch

案例

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<?php

namespace App\Http\Controllers;

use Elastic\Elasticsearch\ClientBuilder;
use Illuminate\Support\Facades\DB;

class ElasticSearch extends Controller
{
public $client = null;
public function __construct()
{
$this->client = ClientBuilder::create()
->setHosts(["http://elasticsearch:9200"])
->setBasicAuthentication('elastic', "123456")
->build();
}
public function infos()
{
$response = $this->client->info();
echo "<pre>";
print_R($response);
}
// 创建分词索引
public function esCreateIk()
{
$params = [
'index' => 'ik',
'body' => [
'mappings' => [
'properties' => [
'content' => [
'type' => 'text',
'analyzer' => 'ik_max_word',
],
],
],
],
];

$ik = $this->client->indices()->create($params);
dd($ik->asArray());
}
//判断索引是否存在
public function isIndex()
{
$index = $this->client->indices()->exists(
['index' => 'ik']
)->asBool();
dd($index);
}
//查看索引的的信息
public function indexInfo()
{
$index = $this->client->indices()->getMapping(
['index' => 'ik']
);
dd($index->asArray());
}
//删除索引及数据
public function indexDelete()
{
$index = $this->client->indices()->delete(
['index' => 'ik']
);
dd($index->asArray());
}
//删除索引下面id=1的数据
public function esDelete()
{
$params = [
'index' => 'ik',
'id' => 1,
];
$response = $this->client->delete($params);
dd($response->asArray());
}
// 数据插入
public function esCreateIkData()
{
$array = [
'index' => 'ik',
'type' => 'doc',
'id' => 1,
'body' => [
'content' => '测试数据',
],
];
$result = $this->client->index($array);
dd($result);
}
// 批量插入数据
public function eaCreateIkDataBulk()
{

set_time_limit(0);
$data = DB::table('faq')->get();
// 一条一条插入
foreach ($data as $key => $value) {
$array['body'][] = ['index' => ['_index' => 'ik', '_id' => $value->id]];
$array['body'][] = ['content' => $value->content];
}
$result = $this->client->bulk($array);
dd($result);
}
// 查询当前索引下有多少数据
public function esCountData()
{
$params = [
'index' => 'ik',
];
echo $this->client->count($params);
}
/**
* 查询 ik 下面所有数据
* 默认返回最多10数据
*/
public function esIkSearch()
{
$query = [
'index' => 'ik',
// 'id' => 1, // 查询id 的话就加这个字段
];
$result = $this->client->search($query);
dd($result->asArray());
}
/**
* 查询 ik 下面数据 加各种条件
*
*/
public function esIkSearchWhere()
{
$query = [
'index' => 'ik',
'body' => [
'query' => [
'match' => [
'content' => '被骗了几千块钱,有微信怎么要回来'
]
]
],
'_source' => ['content'], //目前只有content 如果字段多了 想要那个返回哪个。可以不设置。默认返回所有数据
'size' => 5, //设置一次返回5条数据、可以不设置
'from' => 2, //从第几条开始 类似于limit 5,2 可以不设置
];
$result = $this->client->search($query);
dd($result->asArray());
}
/**
* 修改数据
* 把 ik 下面 id=1 的content 修改
*/
public function esIkedit()
{
$query = [
'index' => 'ik',
'id' => 1,
'body' => [
'doc' => [
'content' => '修改数据'
],
],
];
$result = $this->client->update($query);
dd($result);
}
}


Laravel中如何使用ES
https://code-lives.github.io/2023/06/16/ElasticSearchLaravel/
作者
Li Jie
发布于
2023年6月16日
许可协议