实战场景

如何在 PHP 中使用 Elasticsearch 的索引 API 接口

知识点

  • PHP
  • Elasticsearch
  • 索引 index
  • MySQL


Elasticsearch 本质上是一个数据库,但并不是 MySQL 这种关系型数据库,查询语言也不是 SQL,而是 Elasticsearch 自己的一套查询语言。既然是数据库,有一些概念是互通的,如下表:

PHP 如何使用 Elasticsearch 的 索引 API 接口_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 的索引操作连通了,接下来就可以在索引上创建文档了。