Elasticsearch. Adding data (indexing)

June 13, 2016 18 Yehor Rykhnov

Elasticsearch. Part 2, the addition of data in Elasticsearch. Previous part: Elasticsearch. What is Elasticsearch and how to install it.

Example of adding data with help CURL, PHP and Yii2.

Elasticsearch. Adding data

Adding data to Elasticsearch by creating employee.

Examples:

Command:

PUT /megacorp/employee/1 {    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}

CURL:

$curl -XPUT 'http://localhost:9200/megacorp/employee/133434 ' -d '
{
      "name":"John",
      "last_name" :"Smith",
      "age" :25,
      "about" :"I love to go rock climbing",    
      "interests": [ "sports", "music" ]
}'

PHP:

To add data, you need to fill an array of three keys

index - analogue of the database name in MySQL.

type - analogue table in MySQL.

body - document. An analog recording line in MySQL table.

require 'vendor/autoload.php'; 
$client = Elasticsearch\ClientBuilder::create()->build();        
$params = [
    "index" => "megacorp",
    "type"  => "employee",
    "body"  => [
        "first_name" => "John", 
        "last_name"  => "Smith",              
        "age"        => "25",         
        "about"      => 'I love to go rock climbing',   
        "interests"  => [ "sports", "music"]            
     ]
];
$response = $client->index($params);
print_r($response); // Print the result

Yii2:

In Yii2 work with elasticsearch made using Class yii\elasticsearch\ActiveRecord

Create a model. And we declare the class with the minimum parameters.

use yii\elasticsearch\ActiveRecord;
class Megacorp extends ActiveRecord
{  
    public static function index() 
    {  
        return 'megacorp'; 
    } 
    public static function type() 
    {  
        return 'employee';  
    }
    
    /**
     Attributes. It is important to point out. Otherwise, the data is not stored.
    */
    public function attributes()
    {
        return [            
            "first_name",
            "last_name",
            "age" ,
            "about" ,
            "interests" 
          ];
      }
   /**
    Rules. It is important to point out. Otherwise, the data is not stored.    
    I set all the attributes of the rules as safe.
    You can specify any other that you need.
    */
    public function rules() 
    {   
        return [
            [$this->attributes(), 'safe']  
        ];
    }
}

Save data (indexing in terminology of elasticsearch)

$model = new Megacorp();
$model->attributes = [  
    "first_name" => "John",
    "last_name"  => "Smith",
    "age"        => "25",
    "about"      => 'I love to go rock climbing',
   "interests"  => [ "sports", "music"]
];

$model->save();

Additionally

Previous part: Elasticsearch. What is Elasticsearch and how to install it

Next part: Example getting of data in Elasticsearch using CURL, PHP, Yii2