Elasticsearch文档的基础操作主要包括:创建、查询、更新、删除、批量查询、批量更新、批量删除。
下面介绍php对elasticsearch文档的基础操作
创建文档
$params = [
'index' => 'my_index', // 索引名
'id' => 'my_id', // 设置文档Id, 可以忽略Id, Es也会自动生成
'body' => [ 'testField' => 'abc'] // 设置文档内容
];
// 创建文档
$response = $client->index($params);
bulk批量创建文档
通过bulk实现批量插入文档,bulk操作,都是一行操作说明,一行操作相关数据的方式进行组织内容。
// 循环插入100条数据
for($i = 0; $i < 100; $i++) {
// bulk操作,先拼接一行index操作参数
$params['body'][] = [
'index' => [
'_index' => 'my_index', // 索引名
'id' => 'my_id', // 设置文档Id, 可以忽略Id, Es也会自动生成
]
];
// 接着拼接index操作的内容,这里就是我们需要插入的文档内容
$params['body'][] = [
'my_field' => 'my_value',
'second_field' => 'some more values'
];
}
// 执行bulk操作
$responses = $client->bulk($params);
查询文档
根据文档id查询
$params = [
'index' => 'my_index', // 索引名
'id' => 'my_id' // 需要查询的文档id
];
// 执行请求
$response = $client->get($params);
局部更新文档
$params = [
'index' => 'my_index', // 索引名
'id' => 'my_id', // 文档id
'body' => [ // ES请求体内容
'doc' => [ // doc包含的内容就是我们想更新的字段内容
'new_field' => 'abc'
]
]
];
// 执行ES请求
$response = $client->update($params);
update by query
根据查询条件匹配更新内容
$params = [
'index' => 'my_index', // 索引名
// 如果出现版本冲突,如何处理?proceed表示继续更新,abort表示停止更新
'conflicts' => 'proceed',
'body' => [ // ES请求体内容
// 通过script更新文档内容,ctx._source代表匹配到的文档
// 含义等于 counter字段值 + 1
'script' => 'ctx._source.counter++',
'query' => [ // 设置查询条件,跟es查询语法一致
"term" => [
'user_id' => 'kimchy'
]
],
],
];
$response = $client->updateByQuery($params);
提示:ES查询语法,请参考:Elasticsearch查询语法,只要将ES查询语法转换成PHP数组即可
Upserts
更新文档内容,如果文档不存在则插入文档。
$params = [
'index' => 'my_index', // 索引名
'id' => 'my_id', // 文档id
'body' => [ // es请求体
'script' => [ // 通过脚本更新内容
// 设置脚本内容,ctx._source代表匹配的文档内容,脚本含义: counter字段值 + 脚本参数count
'source' => 'ctx._source.counter += params.count',
'params' => [ // 设置脚本参数
'count' => 4
],
],
// 如果文档不存在,则插入upsert设置的内容
// upsert的内容就相当于默认值
'upsert' => [
'counter' => 1
],
]
];
// 执行请求
$response = $client->update($params);
删除文档
根据文档Id删除文档
$params = [
'index' => 'my_index', // 索引名
'id' => 'my_id' // 文档id
];
// 执行请求
$response = $client->delete($params);
delete by query
根据查询条件,批量删除文档
$params = [
'index' => 'my_index', // 索引名
// 如果出现版本冲突,如何处理?proceed表示继续更新,abort表示停止更新
'conflicts' => 'proceed',
'body' => [ // ES请求体内容
'query' => [ // 设置查询条件,跟es查询语法一致
"term" => [
'user_id' => 'kimchy'
]
],
],
];
$client->deleteByQuery($params);