Posted at

Elasticsearch の CRUD (PHP)

ライブラリーは Requests を使います。

Create


elastic_create.php

#! /usr/bin/php

<?php
//
// elastic_create.php
//
// Oct/12/2018
//
// ----------------------------------------------------------------
function dict_append_proc ($dict_aa,$id,$name,$population,$date_mod)
{
$dict_unit = array ();
$dict_unit['name'] = $name;
$dict_unit['population'] = $population;
$dict_unit['date_mod'] = $date_mod;
$dict_aa[(string)$id]= $dict_unit;

return $dict_aa;
}

//
// ----------------------------------------------------------------
function data_prepare_proc ()
{
$dict_aa = array ();

$dict_aa = dict_append_proc ($dict_aa,"t0921",'宇都宮',71345,'2002-8-15');
$dict_aa = dict_append_proc ($dict_aa,"t0922",'小山',68237,'2002-12-4');
$dict_aa = dict_append_proc ($dict_aa,"t0923",'佐野',52876,'2002-7-15');
$dict_aa = dict_append_proc ($dict_aa,"t0924",'足利',49142,'2002-6-22');
$dict_aa = dict_append_proc ($dict_aa,"t0925",'日光',81953,'2002-10-18');
$dict_aa = dict_append_proc ($dict_aa,"t0926",'下野',72537,'2002-9-21');
$dict_aa = dict_append_proc ($dict_aa,"t0927",'さくら',49816,'2002-8-24');
$dict_aa = dict_append_proc ($dict_aa,"t0928",'矢板',52681,'2002-9-21');
$dict_aa = dict_append_proc ($dict_aa,"t0929",'真岡',74536,'2002-8-5');
$dict_aa = dict_append_proc ($dict_aa,"t0930",'栃木',27146,'2002-6-17');
$dict_aa = dict_append_proc ($dict_aa,"t0931",'大田原',25371,'2002-8-15');
$dict_aa = dict_append_proc ($dict_aa,"t0932",'鹿沼',38179,'2002-9-17');
$dict_aa = dict_append_proc ($dict_aa,"t0933",'那須塩原',19436,'2002-7-11');
$dict_aa = dict_append_proc ($dict_aa,"t0934",'那須烏山',73912,'2002-8-24');

return $dict_aa;
}

// ----------------------------------------------------------------
fputs (STDERR,"*** 開始 ***\n");

include('Requests/library/Requests.php');
Requests::register_autoloader();

$dict_aa = data_prepare_proc ();

$url_base = "http://localhost:9200/cities/tochigi";

foreach ($dict_aa as $key => $value)
{
$json_str = json_encode($value);
print $key . "\n";
$url = $url_base . "/" . $key;

$headers = array('content-type' => 'application/json');
$request = Requests::put($url,$headers, $json_str);
};

fputs (STDERR,"*** 終了 ***\n");
// ----------------------------------------------------------------
?>


Read


elastic_read.php

#! /usr/bin/php

<?php
// ------------------------------------------------------------------
// php/read/elastic_read.php
//
// Oct/12/2018
//
// ------------------------------------------------------------------
function dict_display_proc ($dict_aa)
{
ksort ($dict_aa);

foreach ($dict_aa as $key => $value)
{
$name = $value["name"];
$population = $value['population'];
$date_mod = $value['date_mod'];

print "$key\t";
print "$name\t";
print "$population\t";
print "$date_mod\n";
}
}

//
// ------------------------------------------------------------------
fputs (STDERR,"*** 開始 ***\n");

include('Requests/library/Requests.php');
Requests::register_autoloader();

$url = "http://localhost:9200/cities/tochigi/_search?q=*&size=100";

$request = Requests::get($url, array('Accept' => 'application/json'));

$json_string = $request->body;

$data_aa = json_decode ($json_string,true);

// var_dump ($data_aa['hits']['hits']);

$count = count($data_aa['hits']['hits']);

print $count . "\n";

$dict_aa = array ();

foreach ($data_aa['hits']['hits'] as $unit)
{
$key = $unit['_id'];
$dict_aa[$key] = $unit['_source'];
}

dict_display_proc ($dict_aa);

fputs (STDERR,"*** 終了 ***\n");
// ------------------------------------------------------------------
?>


Update


elastic_update.php

#! /usr/bin/php

<?php
// ------------------------------------------------------------------
// update/elastic_update.php
//
// Oct/12/2018
//
// ------------------------------------------------------------------
fputs (STDERR,"*** 開始 ***\n");

date_default_timezone_set('Asia/Tokyo');
include('Requests/library/Requests.php');
Requests::register_autoloader();

$key_in = $argv[1];
$population_in = intval ($argv[2]);

echo $key_in . "\t";
echo $population_in . "\n";

$url = "http://localhost:9200/cities/tochigi/" . $key_in . "/_update";

print $url . "\n";

$str_date_mod = date ("Y-m-d");

$params = array("population" => $population_in,"date_mod" => $str_date_mod);
$script = array("source" => "ctx._source.population = params.population; ctx._source.date_mod = params.date_mod", "lang" => "painless", "params" => $params);
$args = array("script" => $script);
$json_str = json_encode ($args);

$headers = array('content-type' => 'application/json');
$request = Requests::post($url,$headers, $json_str);

// var_dump($request);
var_dump($request->status_code);

fputs (STDERR,"*** 終了 ***\n");

// ------------------------------------------------------------------
?>


Delete


elastic_delete.php

#! /usr/bin/php

<?php
// ------------------------------------------------------------------
// elastic_delete.php
//
// Oct/12/2018
//
// ------------------------------------------------------------------
fputs (STDERR,"*** 開始 ***\n");
include('Requests/library/Requests.php');
Requests::register_autoloader();

$key_in = $argv[1];

echo $key_in . "\n";

$url = "http://localhost:9200/cities/tochigi/" . $key_in;

$request = Requests::delete($url);

var_dump($request->status_code);

fputs (STDERR,"*** 終了 ***\n");

// ------------------------------------------------------------------
?>