Elasticsearch + PHP 开发实战:从入门到应用

阅读:7 2025-03-13

一、Elasticsearch 与 PHP 的集成原理

Elasticsearch 提供了一个基于 RESTful API 的接口,PHP 通过发送 HTTP 请求与 Elasticsearch 进行通信。

PHP 主要通过以下方式与 Elasticsearch 交互:
✅ 直接使用 cURL 调用 Elasticsearch API
✅ 使用官方提供的 elasticsearch/elasticsearch PHP 包
✅ 通过 JSON 格式与 Elasticsearch 进行数据交互


二、环境搭建

1. 安装 Elasticsearch

首先需要在服务器或本地环境安装 Elasticsearch:

# 下载最新版本 Elasticsearchwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.11.3-linux-x86_64.tar.gz# 解压并安装tar -xzf elasticsearch-8.11.3-linux-x86_64.tar.gzcd elasticsearch-8.11.3# 启动 Elasticsearch./bin/elasticsearch

在浏览器中访问:

http://localhost:9200

2. 安装 PHP 及扩展

安装 PHP 和必要的扩展:

sudo apt install php php-cli php-mbstring php-curl php-xml php-json -y

3. 安装 PHP 的 Elasticsearch 包

使用 Composer 安装官方 Elasticsearch 客户端包:

composer require elasticsearch/elasticsearch

三、使用 PHP 操作 Elasticsearch

1. 引入 Elasticsearch 包

在 PHP 文件中引入 Elasticsearch 的自动加载器:

require 'vendor/autoload.php';use Elasticsearch\ClientBuilder;$client = ClientBuilder::create()->setHosts(['localhost:9200'])->build();

2. 创建索引

创建名为 my_index 的索引,定义其结构(Mapping):

$params = [    'index' => 'my_index',    'body' => [        'settings' => [            'number_of_shards' => 1,            'number_of_replicas' => 1
        ],        'mappings' => [            'properties' => [                'title' => ['type' => 'text'],                'author' => ['type' => 'keyword'],                'content' => ['type' => 'text'],                'published_date' => ['type' => 'date']
            ]
        ]
    ]
];$response = $client->indices()->create($params);print_r($response);

number_of_shards:定义分片数量
number_of_replicas:定义副本数量
type:定义字段类型


3. 插入数据

使用 index() 方法将数据插入 Elasticsearch:

$params = [    'index' => 'my_index',    'id' => 1,    'body' => [        'title' => 'Elasticsearch + PHP 集成指南',        'author' => '码农资讯网',        'content' => 'Elasticsearch 是一个分布式的搜索和分析引擎,适用于各种应用场景。',        'published_date' => date('Y-m-d')
    ]
];$response = $client->index($params);print_r($response);

index:索引名称
id:文档的唯一 ID
body:存储的数据内容


4. 批量插入数据

通过 bulk() 方法批量插入数据:

$params = ['body' => []];for ($i = 1; $i <= 5; $i++) {    $params['body'][] = [        'index' => [            '_index' => 'my_index',            '_id'    => $i
        ]
    ];    $params['body'][] = [        'title' => 'Elasticsearch 教程 - 第 ' . $i . ' 课',        'author' => '码农资讯网',        'content' => '这是 Elasticsearch 和 PHP 集成的第 ' . $i . ' 课。',        'published_date' => date('Y-m-d')
    ];
}$response = $client->bulk($params);print_r($response);

5. 查询数据

使用 search() 方法在 Elasticsearch 中查询数据:

$params = [    'index' => 'my_index',    'body' => [        'query' => [            'match' => [                'title' => 'Elasticsearch'
            ]
        ]
    ]
];$response = $client->search($params);print_r($response);

match:按字段进行模糊查询
term:完全匹配查询


6. 删除数据

通过 delete() 方法删除文档:

$params = [    'index' => 'my_index',    'id' => 1];$response = $client->delete($params);print_r($response);

7. 删除索引

通过 delete() 方法删除索引:

$params = [    'index' => 'my_index'];$response = $client->indices()->delete($params);print_r($response);

四、结合 Laravel 使用 Elasticsearch

如果你使用的是 Laravel 框架,可以通过安装 elasticsearch/elasticsearch 包来集成 Elasticsearch。

1. 安装包

composer require elasticsearch/elasticsearch

2. 在 Laravel 配置中定义服务

config/services.php 文件中配置 Elasticsearch:

'elastic' => [    'host' => env('ELASTIC_HOST', 'localhost:9200'),
],

3. 创建服务类

创建 ElasticsearchService 进行封装:

namespace App\Services;use Elasticsearch\ClientBuilder;class ElasticsearchService{    protected $client;    public function __construct()
    {        $this->client = ClientBuilder::create()->setHosts([config('services.elastic.host')])->build();
    }    public function search($index, $query)
    {        $params = [            'index' => $index,            'body' => [                'query' => [                    'match' => [                        'title' => $query
                    ]
                ]
            ]
        ];        return $this->client->search($params);
    }
}

4. 调用服务

在控制器中调用 Elasticsearch 服务:

use App\Services\ElasticsearchService;public function search(ElasticsearchService $elastic)
{    $result = $elastic->search('my_index', 'Elasticsearch');    return response()->json($result);
}

五、常见问题

🔹 1. Elasticsearch 启动失败

  • 查看日志:

tail -f logs/elasticsearch.log

🔹 2. PHP 连接失败

  • 确认 Elasticsearch 端口是否开放:

sudo netstat -tulnp | grep 9200

🔹 3. 查询无结果

  • 确认索引中是否存在数据


六、总结

在本教程中,我们学习了如何在 PHP 中集成 Elasticsearch,包括:
✅ 安装和配置 Elasticsearch
✅ 使用 PHP 操作 Elasticsearch
✅ 数据的增删改查操作
✅ 批量操作和查询优化

👉 快速搭建自己的 PHP + Elasticsearch 搜索系统,提升系统性能和数据查询效率! 😎


声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!

搜索