適当にElasticsearchの処理をまとめておいて、
const elasticsearch = require('elasticsearch');
const client = new elasticsearch.Client({
host: 'localhost:9200/',
log: 'trace'
});
const index_name = "memo";
const max_size = 100;
export async function save(type, data) {
if(type[0] == "mode"){
const update = await client.update({
index: index_name,
id: type[1],
body: {
doc:{
mode:data.mode,
find:data.find
}
}
})
}else if(type[0] == "memo"){
const add = await client.index({
index: index_name,
body: {
memo:{
message:data.message,
created:data.created
}
}
})
}
}
export async function load(type, str) {
if(type == "mode"){
const search = await client.search({
index: index_name,
body: {
size : max_size,
_source: ["mode","find"],
query: {
"match_all": {}
}
}
})
return createdata(search, type)
}else if(type == "memo"){
if(str==""){
const search = await client.search({
index: index_name,
body: {
size : max_size,
_source: ["memo"],
query: {
"match_all": {}
}
}
})
return createdata(search, type)
}else{
const search = await client.search({
index: index_name,
body: {
size : max_size,
_source: ["memo"],
query: {
"match": {
"memo.message": str
}
}
}
})
return createdata(search, type)
}
}
}
export async function del(data_id) {
const del = await client.delete({
index: index_name,
id: data_id
})
}
function createdata(params,key) {
let datas = [];
for(let i=0; i<params.hits.hits.length; i++){
if(key=="mode"){
var data = {mode:params.hits.hits[i]._source.mode, find:params.hits.hits[i]._source.find}
if(data.mode){
data["id"] = params.hits.hits[i]._id;
datas.push(data);
}
}else{
var data = params.hits.hits[i]._source[key];
if(data){
data["id"] = params.hits.hits[i]._id;
datas.push(data);
}
}
}
return datas;
}
上記の関数を外から呼び出したりする。
ただし、async
/await
を普通に使おうとすると怒られるので、useEffect
で包む。
import React, {useState, useEffect} from 'react'
import * as ELController from'./ELController'
const [mode, setMode] = useState({mode:'default',find:"", id:""})
useEffect(
() => {
const f = async () => {
const res = await ELController.load("mode", "")
setMode(res[0])
}
f();
},
[]
);