当前位置:首页 > 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中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart/…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…