实战场景
如何在 PHP 中使用 Elasticsearch 的索引 API 接口
知识点
- PHP
- Elasticsearch
- 索引 index
- MySQL
Elasticsearch 本质上是一个数据库,但并不是 MySQL 这种关系型数据库,查询语言也不是 SQL,而是 Elasticsearch 自己的一套查询语言。既然是数据库,有一些概念是互通的,如下表:
菜鸟实战
基础环境准备可参考之前文章。
创建索引
发送创建请求
PHP
// 创建索引
public function create(Request $request){
// 获取索引名称
$testIndex = $request->get("index_name", "test");
// 执行
$client = EsHelper::getEsClient();
$params = [
'index' => $testIndex,
];
$response = $client->indices()->create($params);
// 返回
$data = [
'es_info' => $response->asArray(),
];
$this->success($data);
}
创建索引返回结果
JSON
{
"code": 0,
"message": "ok",
"data": {
"es_info": {
"acknowledged": true,
"shards_acknowledged": true,
"index": "test"
}
}
}
更加复杂的参数
可指定主分片个数:number_of_shards
可指定副分片个数:number_of_replicas
PHP
$params = [
'index' => 'my_index',
'body' => [
'settings' => [
'number_of_shards' => 3,
'number_of_replicas' => 2
],
'mappings' => [
'my_type' => [
'_source' => [
'enabled' => true
],
'properties' => [
'first_name' => [
'type' => 'string',
'analyzer' => 'standard'
],
'age' => [
'type' => 'integer'
]
]
]
]
]
];
查询索引详情
发送查询请求
PHP
// 查询索引
public function detail(Request $request){
// 获取索引名称
$queryIndexName = $request->get("index_name", "test");
$params = [
'index' => $queryIndexName,
];
// 执行
$client = EsHelper::getEsClient();
$result = "";
try {
$response = $client->indices()->get($params);
$result = $response->asArray();
}catch (\Exception $e){
$result = $e->getMessage();
}
// 返回
$data = [
'es_info' => $result,
];
$this->success($data);
}
响应结果
JSON
{
"code": 0,
"message": "ok",
"data": {
"es_info": {
"test1": {
"aliases": [],
"mappings": [],
"settings": {
"index": {
"routing": {
"allocation": {
"include": {
"_tier_preference": "data_content"
}
}
},
"number_of_shards": "1",
"provided_name": "test1",
"creation_date": "1669179904968",
"number_of_replicas": "1",
"uuid": "Y62XH2Z4RC-kd2cKieOu9Q",
"version": {
"created": "8050199"
}
}
}
}
}
}
}
更新索引
发送更新索引请求
PHP
// 更新索引
public function update(Request $request){
// 获取索引名称
$indexName = $request->get("index_name", "test");
$number_of_replicas = $request->get("number_of_replicas", 1);
// 确定参数
$params = [
'index' => $indexName,
'body' => [
'settings' => [
'number_of_replicas' => $number_of_replicas,
]
]
];
// 执行
$client = EsHelper::getEsClient();
try {
$response = $client->indices()->putSettings($params);
$result = $response->asArray();
}catch (\Exception $e){
$result = $e->getMessage();
}
// 返回
$data = [
'es_info' => $result,
];
$this->success($data);
}
响应结果
JSON
{
"code": 0,
"message": "ok",
"data": {
"es_info": {
"acknowledged": true
}
}
}
删除索引
发送删除索引请求
PHP
// 删除索引
public function delete(Request $request){
// 获取索引名称
$indexName = $request->get("index_name", "test1");
// 确定参数
$params = [
'index' => $indexName,
];
// 执行
$client = EsHelper::getEsClient();
try {
$response = $client->indices()->delete($params);
$result = $response->asArray();
}catch (\Exception $e){
$result = $e->getMessage();
}
// 返回
$data = [
'es_info' => $result,
];
$this->success($data);
}
响应结果
JSON
{
"code": 0,
"message": "ok",
"data": {
"es_info": {
"acknowledged": true
}
}
}
通过上述步骤,就将 php 与 Elasticsearch 的索引操作连通了,接下来就可以在索引上创建文档了。