0
2

More than 1 year has passed since last update.

Elasticsearch の CRUD (Node.js)

Last updated at Posted at 2018-10-06
package.json
{
  "type": "module"
}

Create

elastic_create.js
#! /usr/bin/node
// ---------------------------------------------------------------
//	elastic_create.js
//
//						Mar/23/2022
//
// ---------------------------------------------------------------
'use strict'

import * as http from "http"
// ---------------------------------------------------------------
function dict_append_proc (dict_aa,id_in,name_in,population_in,date_mod_in)
{
	var unit_aa = {}
	unit_aa['name'] = name_in
	unit_aa['population'] = population_in
	unit_aa['date_mod'] = date_mod_in

	dict_aa[id_in] = unit_aa

	return  dict_aa
}

// ---------------------------------------------------------------
function data_prepare_proc ()
{
	var dict_aa = new Object ()

	dict_aa = dict_append_proc (dict_aa,'t0921','宇都宮',63729,'1950-3-21')
	dict_aa = dict_append_proc (dict_aa,'t0922','小山',29157,'1950-9-15')
	dict_aa = dict_append_proc (dict_aa,'t0923','佐野',64781,'1950-11-7')
	dict_aa = dict_append_proc (dict_aa,'t0924','足利',38124,'1950-6-22')
	dict_aa = dict_append_proc (dict_aa,'t0925','日光',49675,'1950-8-28')
	dict_aa = dict_append_proc (dict_aa,'t0926','下野',65813,'1950-9-12')
	dict_aa = dict_append_proc (dict_aa,'t0927','さくら',37251,'1950-3-21')
	dict_aa = dict_append_proc (dict_aa,'t0928','矢板',52416,'1950-7-26')
	dict_aa = dict_append_proc (dict_aa,'t0929','真岡',26857,'1950-10-2')
	dict_aa = dict_append_proc (dict_aa,'t0930','栃木',48923,'1950-12-20')
	dict_aa = dict_append_proc (dict_aa,'t0931','大田原',75284,'1950-2-7')
	dict_aa = dict_append_proc (dict_aa,'t0932','鹿沼',96351,'1950-5-17')
	dict_aa = dict_append_proc (dict_aa,'t0933','那須塩原',82937,'1950-6-19')
	dict_aa = dict_append_proc (dict_aa,'t0934','那須烏山',73152,'1950-8-24')

	return  dict_aa
}

// ---------------------------------------------------------------
console.error ("*** 開始 ***")

const dict_aa = data_prepare_proc ()

const url_base = "http://localhost:9200/cities/tochigi"

for (var key in dict_aa)
	{
	const unit_aa = dict_aa[key]

	const data = JSON.stringify(unit_aa)
	const options = {
		method: "PUT",
		headers: {
			"Content-Type": "application/json",
			'Content-Length': Buffer.byteLength(data)
			}
		}

	const url = url_base + "/" + key

	const request = http.request(url, options, response => {
		console.log(`statusCode: ${response.statusCode}`)
		})

	request.write(data)
	request.end()
	}

console.error ("*** 終了 ***")

// ---------------------------------------------------------------

Read

elastic_read.js
#! /usr/bin/node
// ---------------------------------------------------------------
//	elastic_read.js
//
//						Mar/23/2022
//
// ---------------------------------------------------------------
'use strict'

import * as http from "http"

// ---------------------------------------------------------------
function sort_key_proc (dict_aa)
{
	var array = new Array()

	for(var it in dict_aa)
		{
		array.push({'key':String (it), 'value':dict_aa[it]})
		}

	array.sort (compare_by_key_proc)

	return array
}

// ---------------------------------------------------------------
function compare_by_key_proc (left,right)
{
	var aa = left.key
	var bb = right.key

	var rvalue = 0

	if (aa < bb)
		{
		rvalue = -1
		}
	else if (aa > bb)
		{
		rvalue = 1
		}

	return  rvalue
}
// ---------------------------------------------------------------
function dict_display_proc (dict_aa)
{
	const array_aa = sort_key_proc (dict_aa)

	array_aa.forEach (function(unit_aa,index)
		{
		const key = unit_aa.key
		const value = unit_aa.value

		var out_str = key + "\t"
		out_str += value["name"] + "\t"
		out_str += value["population"] + "\t"
		out_str += value["date_mod"]
		console.log (out_str)
		})  
}

// ---------------------------------------------------------------
console.error ("*** 開始 ***")

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

const options = {
	method: 'GET'
}

const req = http.request(url,options, res => {
	console.log(`statusCode: ${res.statusCode}`)

	res.on('data', dd => {
//	process.stdout.write(dd)
	const data_aa = JSON.parse (dd)
	const llx = data_aa['hits']['hits'].length
//	console.error ("llx = " + llx)

	var dict_aa = {}
	for (var it =0; it< llx; it+=1)
		{
		const key = data_aa['hits']['hits'][it]['_id']
		const value = data_aa['hits']['hits'][it]['_source']
		dict_aa[key] = value
		}

	dict_display_proc(dict_aa)
	console.error ("*** 終了 ***")
	})
})

req.on('error', error => {
	console.error(error)
})

req.end()

// ---------------------------------------------------------------

Update

elastic_update.js
#! /usr/bin/node
// ---------------------------------------------------------------
//	elastic_update.js
//
//					Mar/23/2022
//
// ---------------------------------------------------------------
'use strict'

import * as http from "http"
// ---------------------------------------------------------------
function get_current_date_proc ()
{
	const today = new Date ()
	var ddx = (today.getFullYear ()) + "-" + (today.getMonth () +1)
	ddx += "-" + today.getDate ()

	return ddx
}

// ---------------------------------------------------------------
console.error ("*** 開始 ***")
const key_in=process.argv[2]
const population_in=process.argv[3]

console.log (key_in + "\t" + population_in)

const str_date_mod = get_current_date_proc ()

const data_in = {"script" : {
	"source": "ctx._source.population = params.population; ctx._source.date_mod = params.date_mod",
		"lang": "painless",
		"params" : {
			"population" : population_in,
			"date_mod" : str_date_mod
			}
		}
	}


	const data = JSON.stringify(data_in)

	const options = {
		method: "POST",
		headers: {
			"Content-Type": "application/json",
			'Content-Length': Buffer.byteLength(data)
			}
		}

const url = "http://localhost:9200/cities/tochigi/" + key_in + "/_update"

	const request = http.request(url, options, response => {
		console.log(`statusCode: ${response.statusCode}`)
		})

	request.write(data)
	request.end()

	console.error ("*** 終了 ***")

// ---------------------------------------------------------------

実行スクリプト

./elastic_update.js t0926 1894700

Delete

elastic_delete.js
#! /usr/bin/node
// ---------------------------------------------------------------
//	elastic_delete.js
//
//					Mar/23/2022
//
// ---------------------------------------------------------------
'use strict'

import * as http from "http"
// ---------------------------------------------------------------
console.error ("*** 開始 ***")
const key_in=process.argv[2]

console.log (key_in)

const url = "http://localhost:9200/cities/tochigi/" + key_in

const options = {
	method: "DELETE"
	}

const request = http.request(url, options, response => {
		console.log(`statusCode: ${response.statusCode}`)
		})

request.end()
console.error ("*** 終了 ***")

// ---------------------------------------------------------------

実行スクリプト

./elastic_delete.js t0922
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2