This laravel 9 tutorial help to create CRUD rest endpoint using Elastic Search. We’ll create a rest API for add a record, edit a record , list all records and delete a records from ES database.
Nowadays, web application/tools are created on two layers, one is UI – which are created on front-end technology react, angular etc and the other is back-end which is created on backend technology like nodejs, PHP, java etc.
I have created the front-end into reactjs and the backend API is created into Laravel 9. ElasticSearch is used as a database for this project. You can create a front-end into any technology as per your project requirements.
I have already shared tutorials How To Integrate ElasticSearch With Laravel 9. I am extending this tutorial and adding CRUD operation using rest api.
Laravel CRUD API Using ElasticSearch
Let’s create a CRUD laravel API that will handle insert, update and delete elasticsearch operation. I have created ESController.php and EsService.php – This file will have all service methods that will communicate with ElasticSearch.
Open api.php file and added below entry for CRUD Operation –
//all elasticsearch data
Route::get('es/all', 'ESController@getAllData');
// get single data
Route::get('es/{id}', 'ESController@getDataById');
//create a record
Route::post('es/create', 'ESController@insertData');
//upadte a record
Route::put('es/update/{id}', 'ESController@updateData');
delete a record
Route::delete('es/{id}', 'ESController@deleteData');I have created all rest endpoints.
How To Get All Record From Elastic Search
Let’s open ESController.php file and added getAllData() method to get all record.
public function getAllData(Request $request) {
$from = 0;
$size = 200;
$response = $this->es_service->all($from, $size);
return $this->jsonpSuccess($response);
}We have passed constant from and size parameter to a service method, I have created all() method into EsService.php file.
public function all($from = 0, $size = 200) {
$es = $this->es;
$params['index'] = $this->index;
$params['type'] = $this->type;
$params['size'] = $size;
$params['from'] = $from;
try {
$results = $es->search($params);
$hits = $results['hits'];
return $hits;
} catch (\Exception $ex) {
\Log::critical($ex);
$this->apiError("ES - Unable to get Entries", 400);
}
}How To Create A Record Into ElasticSearch Using Laravel
We’ll create a method into the Controller file to insert a new record into the ES database. I already added an entry into api.php file which is using POST HTTP request, we ll pass the required data into post payload.
Added below method into the ESController.php file –
public function insertData(Request $request) {
$parameters = $request->json()->all();
if(isset($parameters['type']) && $parameters['type'] != '') {
$response = $this->es_service->create($parameters);
return $this->jsonpSuccess($response);
} else {
return $this->jsonpError('Validation error(s) occurred', 400, 400, 'Data is not inserted!.');
}
}We have gotten all posted payloads data using $request->json()->all() method and send to the service create() method. Now added create() method into the service file.
public function create($input, $id = null) {
$es = $this->es;
$params['index'] = $this->index;
$params['type'] = $this->type;
$params['body'] = $input;
try {
$result = $es->index($params);
return array("id" => $result['_id']);
} catch (\Exception $ex) {
\Log::critical($ex);
return $this->apiError('ES - Unable to Create Entry', 400);
}
}Update A Record Into ElasticSearch Using Laravel
Let’s update a record in the elasticsearch database. We’ll create a method into the controller file that’ll call the service method to update the record into the database.
As per route entry, Created a PUT type HTTP request to update data, we will pass ES id into the rest endpoint and post data into the HTTP request body as a JSON format.
Let’s add the below method into the ESController.php file –
public function updateData($id, Request $request) {
$data = $request->json()->all();
if(isset($id) && $id != '') {
$response = $this->es_service->update($id, $data);
return $this->jsonpSuccess($response);
} else {
return $this->jsonpError('Validation error(s) occurred', 400, 400, 'Pipeline request data is not updated!.');
}
}This method takes $id– ES database id and payloads as parameter. We’ll create update() method into service.
public function update($id, $input) {
$es = $this->es;
$params['index'] = $this->index;
$params['type'] = $this->type;
$params['id'] = $id;
$params['body']['doc'] = $input;
try {
$retUpdate = $es->update($params);
return array("id" => $retUpdate['_id']);
} catch (\Exception $ex) {
\Log::critical($ex);
return $this->apiError('ES - Unable to Update Entry', 400);
}
}We have gotten all posted payload data using $request->json()->all() method and send it to the service create() method. Now added update() method into the service file.
Delete A Record from ElasticSearch Using Laravel
Now, I will delete a record from the ElasticSearch database. We’ll create a method into the controller file that’ll call the service method to delete record from the database.
Let’s create a PUT type HTTP request to delete data, We will pass ES id into the rest endpoint.
Let’s add the below method into the ESController.php file –
public function deleteData($id) {
if(isset($id) && $id != '') {
$response = $this->self_serve_cmdb->deleteById($id);
return $this->jsonpSuccess($response);
} else {
return $this->jsonpError('Validation error(s) occurred', 400, 400, 'Pipeline request data is not deleted!.');
}
}This method takes $id– ES database id and payloads as parameter. We will create update() method into service.
/**
* delete an entry by es *
* @param string $id
*/
public function deleteById($id) {
$es = $this->es;
$params['index'] = $this->index;
$params['type'] = $this->type;
$params['id'] = $id;
try {
$retDelete = $es->delete($params);
return array("id" => $retDelete['_id']);
} catch (\Exception $ex) {
\Log::critical($ex);
return $this->apiError('ES - Unable to Delete Entry', 400);
}
}I have ES id as a parameter for delete a record using delete() method.
Conclusion
We have learned ElasticSearch integration with laravel into first part of this tutorial, This tutorial helped to create CRUD operation for elastic-search using laravel 9. Created Rest API add a record, update a record and delete a record from elasticsearch using Laravel 9.

















