Elasticsearch の CRUD (PHP)

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

Create

```php: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

```php: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

```php: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

```php: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");

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