三、ElasticSearch - PHP 操作 ES 文档 CURD 操作
hi,我是温新,一名 PHPer
ES 版本:ElasticSearch 8.6.0
系统版本:Rocky Linux 9.1
学习目标:学会 PHP CURD 操作文档
本篇文章结合官方文档编写及参考网络资料编写,虽非全部原创,但也是结合了自己的理解,若转载请附带本文 URL,编写不易,持续编写更不易,谢谢!
Elasticsearch 文档的基础操作主要包括:创建、查询、更新、删除、批量查询、批量更新、批量删除。
查询文档
1、根据文档 ID 查询
// 根据文档 ID 查询
public function searchIndexDocById()
{
$doc = [
'index' => 'php_articles',
'id' => 1
];
$response = $this->client->get($doc);
return json_decode($response->getBody(), true);
}
2、查询某个索引下的所有文档
public function searchIndexDocSearch()
{
// 查询该索引下的所有文档
$search = [
'index' => 'php_articles'
];
$response = $this->client->search();
return json_decode($response->getBody(), true);
}
3、查询匹配
public function searchIndexDocSearch()
{
// 查询匹配
$search = [
'index' => 'php_articles',
'body' => [
"query" => [
"match" => [
'title' => '学习'
]
]
]
];
$response = $this->client->search($search);
return json_decode($response->getBody(), true);
}
该方式 ES 中的所有查询都可以用,对应着填写参数即可。
创建文档
// 添加文档
public function docAddCreate()
{
$doc = [
'index' => 'php_articles', // 索引名称
'id' => 1, // 指定文档 ID
'body' => [
// 字段
'title' => '学习 PHP 操作 ES',
'description' => '王美丽学 ES'
]
];
// 创建文档
$response = $this->client->index($doc);
return json_decode($response->getBody(), true);
}
id
可以不指定,不指定时会自动生成一个唯一 ID
返回值:
{
"_index": "php_articles",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 3,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
批量创建文档
可以通过 bluk
实现批量操作。bluk 一行是操作说明, 紧接着下一行是插入的数据,以此类推。
// 批量创建文档
public function docBulkCreate()
{
$doc = [];
for ($i = 0; $i < 5; $i++) {
// 索引
$doc['body'][] = [
'index' => [
'_index' => 'php_articles',
]
];
// 文档,此处拼接插入到 ES 的数据
$doc['body'][] = [
'title' => '学习编程语言 - ' . $i,
'description' => 'ES ' . $i
];
}
// 指定批量操作
$response = $this->client->bulk($doc);
return json_decode($response->getBody(), true);
}
局部更新文档
// 修改局部文档
public function searchIndexDocUpdate()
{
$doc = [
'index' => 'php_articles',
'id' => '476qd4YBY6R0UgdV0bNi',
'body' => [
'doc' => [
'title' => '国内首个类ChatGPT模型发布,服务器被挤崩'
]
]
];
$response = $this->client->update($doc);
return json_decode($response->getBody(), true);
}
删除文档
根据 ID 删除文档
// 根据 ID 删除文档
public function deleteDoc()
{
$doc = [
'index' => 'php_articles',
'id' => 1
];
$response = $this->client->delete($doc);
return json_decode($response->getBody(), true);
}
请登录后再评论