当前位置:首页 > PHP

elasticsearch php实现

2026-01-29 13:53:45PHP

安装 Elasticsearch PHP 客户端

使用 Composer 安装官方提供的 Elasticsearch PHP 客户端库。在项目目录下运行以下命令:

composer require elasticsearch/elasticsearch

建立客户端连接

引入自动加载文件并创建 Elasticsearch 客户端实例:

require 'vendor/autoload.php';

$client = Elasticsearch\ClientBuilder::create()
    ->setHosts(['localhost:9200']) // 设置ES服务器地址
    ->build();

索引文档操作

创建新索引并添加文档:

$params = [
    'index' => 'my_index',
    'id'    => '1',
    'body'  => ['title' => '测试文档', 'content' => '这是PHP插入的内容']
];

$response = $client->index($params);

搜索文档

执行基本搜索查询:

elasticsearch php实现

$params = [
    'index' => 'my_index',
    'body'  => [
        'query' => [
            'match' => ['title' => '测试']
        ]
    ]
];

$results = $client->search($params);
print_r($results['hits']['hits']);

更新文档

部分更新现有文档:

$params = [
    'index' => 'my_index',
    'id'    => '1',
    'body'  => [
        'doc' => ['content' => '更新后的内容']
    ]
];

$response = $client->update($params);

删除文档

删除指定文档:

$params = [
    'index' => 'my_index',
    'id'    => '1'
];

$response = $client->delete($params);

批量操作

执行批量索引操作提高效率:

elasticsearch php实现

$params = ['body' => []];

$params['body'][] = [
    'index' => [
        '_index' => 'my_index',
        '_id' => '2'
    ]
];
$params['body'][] = [
    'title' => '批量文档1',
    'content' => '批量内容1'
];

$params['body'][] = [
    'index' => [
        '_index' => 'my_index',
        '_id' => '3'
    ]
];
$params['body'][] = [
    'title' => '批量文档2',
    'content' => '批量内容2'
];

$response = $client->bulk($params);

高级搜索功能

使用复合查询和聚合:

$params = [
    'index' => 'my_index',
    'body' => [
        'query' => [
            'bool' => [
                'must' => [
                    ['match' => ['title' => '测试']],
                    ['range' => ['created_at' => ['gte' => 'now-1d/d']]]
                ]
            ]
        ],
        'aggs' => [
            'content_terms' => ['terms' => ['field' => 'content.keyword']]
        ]
    ]
];

错误处理

添加异常处理机制:

try {
    $response = $client->search($params);
} catch (Elasticsearch\Common\Exceptions\Missing404Exception $e) {
    echo "索引不存在: ".$e->getMessage();
} catch (Exception $e) {
    echo "发生错误: ".$e->getMessage();
}

性能调优

配置客户端连接参数:

$client = Elasticsearch\ClientBuilder::create()
    ->setHosts(['127.0.0.1:9200'])
    ->setRetries(2) // 重试次数
    ->setConnectionPool('\Elasticsearch\ConnectionPool\SimpleConnectionPool')
    ->setSelector('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
    ->build();

分享给朋友:

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素(不移除…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…