三、ElasticSearch - PHP 操作 ES 文档 CURD 操作

作者: 温新

分类: 【Elasticsearch】

阅读: 1486

时间: 2023-02-22 08:02:38

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);
}
请登录后再评论