php elasticsearch教程,主要从php角度讲解elasticsearch的增删改查等操作。
提示:如果不熟悉Elasticsearch的相关概念和查询语法,请参考:Elasticsearch 教程,这里不再重复介绍ES的核心概念和查询语法。
php elasticsearch 教程,主要围绕ES官方php客户端进行讲解。
版本说明
注意自己的Php版本和Elasticsearch版本的对应关系,选择合适的php elasticsearch客户端版本。
Elasticsearch版本 | php ES客户端版本 | php版本 |
>= 7.0, < 8.0 | >= 7.0 | > 7.1 |
>= 6.6, ⇐ 6.7 | 6.7.x | > 7.0 |
>= 6.0, ⇐ 6.5 | 6.5.x | > 7.0 |
>= 5.0, < 6.0 | 5.5.0 | > 5.6, < 7.0 |
最新的php es客户端版本是:7.8.0, 需要Php7.1以上,如果需要支持es 5版本,选择es客户端版本5.5.0即可,php5.6就可以使用。
安装依赖
使用Composer方式安装
依赖配置
{
"require": {
"elasticsearch/elasticsearch": "~7.0"
}
}
安装
切换到项目目录,执行命令。
php composer install
提示:关于composer命令路径,安装composer后,将composer命令路径添加到PATH环境变量即可。
加载依赖
在php入口文件,加载autoload脚本,就可以自动加载composer安装的第三方包。
require 'vendor/autoload.php';
创建client
在使用ES之前,需要先创建一个ES client对象,用于配置Elasticsearch连接地址,账号、密码、发送ES请求等等。
use Elasticsearch\ClientBuilder;
// ES服务端配置,这里配置两个ES服务地址,这里是免密码访问的配置方式。
$hosts = [
'localhost:9200',
'localhost:9201',
];
$client = ClientBuilder::create() // 实例化一个ClientBuilder对象,通过他配置client
->setHosts($hosts) // 设置ES服务端配置
->build(); // 创建Client
插入文档
$params = [
'index' => 'my_index', // 索引名
'id' => 'my_id', // 文档id
'body' => ['testField' => 'abc'] // 文档内容,最终会转成json,因此支持任意结构
];
// 通过client::index方法,插入文档,如果
$response = $client->index($params);
print_r($response);
输出结果
Array
(
[_index] => my_index // 索引名
[_type] => _doc // 新版ES已经没什么作用了
[_id] => my_id // 文档id
[_version] => 1 // 文档版本号
[created] => 1
)
提示:es 的index操作,除了插入文档,其实也可以更新文档,如果文档id,已经存在就会更新文档,不过这里的更新操作是全量更新,就是新更新的文档内容会覆盖掉老的文档,而不是局部更新,例如:老的文档内容包含order_id,title两个字段,通过index更新title字段内容,那么新的文档内容只有title字段,order_id字段被丢去了,如果非要使用index实现更新操作,则需要把所有老的字段都写一遍。
读取文档
根据文档id查询内容
$params = [
'index' => 'my_index',// 索引名
'id' => 'my_id' // 需要查询的文档id
];
// 执行请求
$response = $client->get($params);
print_r($response);
输出结果
Array
(
[_index] => my_index // 索引名
[_type] => _doc
[_id] => my_id // 文档id
[_version] => 1
[found] => 1
[_source] => Array // 文档内容
(
[testField] => abc
)
)
搜索文档
$params = [
'index' => 'my_index', // 索引名
'body' => [ // ES查询语法
'query' => [
'match' => [
'testField' => 'abc'
]
]
]
];
// 执行ES请求
$response = $client->search($params);
print_r($response);
输出结果
Array
(
[took] => 1 // 执行时间
[timed_out] => // 是否超时
[_shards] => Array
(
[total] => 5
[successful] => 5
[failed] => 0
)
[hits] => Array // 搜索结果
(
[total] => 1 // 匹配文档数量
[max_score] => 0.30685282 // 匹配分值
[hits] => Array // 匹配文档内容数组,下面就是匹配的一个个文档内容
(
[0] => Array
(
[_index] => my_index
[_type] => _doc
[_id] => my_id
[_score] => 0.30685282
[_source] => Array
(
[testField] => abc
)
)
)
)
)
删除文档
$params = [
'index' => 'my_index', // 索引名
'id' => 'my_id' // 文档id
];
// 执行删除请求
$response = $client->delete($params);
print_r($response);
输出结果
Array
(
[found] => 1 // 是否匹配文档
[_index] => my_index // 索引名
[_type] => _doc
[_id] => my_id // 删除的文档id
[_version] => 2
)
删除索引
$deleteParams = [
'index' => 'my_index' // 索引名
];
$response = $client->indices()->delete($deleteParams);
print_r($response);
输出
Array
(
[acknowledged] => 1 // es服务端接受处理
)
其他详细介绍,请参考后续章节。