環境
Next.jsからDockerで動かしているElasticsearchに繋いでアレコレする
ホスト側のインストールや設定はよしなに…
【参考】DockerのElasticsearchの設定を書き換える
インストール
クライアント用のnodeライブラリをインストール
npm install elasticsearch接続
    const elasticsearch = require('elasticsearch');
    const client = new elasticsearch.Client({
    host: 'localhost:9200/',
    log: 'trace'
    });検索
sizeを指定しないと、デフォルトでは10件しか返ってこない!
    const search = await client.search({
        index: 'hogehoge',
        body: {
            size : 100,
            query: {
                "match_all": {}
              }
            }
      })なお、bodyの中を以下のように、_sourceを指定してSQLのSELECTみたいに、特定のカラムだけ取得したり、matchで検索する。
body: {
                size : max_size,
                _source: ["mode","find"],
                query: {
                    "match":  {
                            "message": "hogehoge"
                        }
                  }
      }単にidで検索するのは以下(なお、getを使うと該当するidがないと404のエラーになる)
*values: [data_id1, data_id2]もOK
body: {
            query: {
                ids: {
                    values: data_id
                }
            }
        }また、検索結果は以下のようにややこしい形式だが、response.hits.hits[i]._source内にあるので、どうにかして取り出す
 -> POST http://hogehoge:9200/memo/_search
  {
    "size": 100,
    "_source": [
      "mode",
      "find"
    ],
    "query": {
      "match_all": {}
    }
  }
  <- 200
  {
    "took": 0,
    "timed_out": false,
    "_shards": {
      "total": 1,
      "successful": 1,
      "skipped": 0,
      "failed": 0
    },
    "hits": {
      "total": {
        "value": 9,
        "relation": "eq"
      },
      "max_score": 1,
      "hits": [
        {
          "_index": "memo",
          "_type": "_doc",
          "_id": "JmvAo4EBPjJae6aOVl2k",
          "_score": 1,
          "_source": {}
        },
        {
          "_index": "memo",
          "_type": "_doc",
          "_id": "JWvAo4EBPjJae6aOK13x",
          "_score": 1,
          "_source": {}
        },
        {
          "_index": "memo",
          "_type": "_doc",
          "_id": "-WtjoIEBPjJae6aOh1zz",
          "_score": 1,
          "_source": {
            "mode": "find",
            "find": "2回目"
          }
        }
      ]
    }
  }登録
    const add = await client.index({
        index: 'hogehoge',
        body: {
            
            a:"aaa"
            
        }
    })更新
doc:{ }で包む"a":"DDD"のようにキーにも" "をつける
    const update = await client.update({
        index: 'kouju',
        id: "DRYRgIEBGMbDfcRL9Qw9",
        body: {
            doc:{
                "a":"DDD"
            }
        }
      })削除
    const del = await client.delete({
        index: 'hogehoge',
        id: "6"
      })React(Next.js)の非同期処理
【参考】React(Next.js) + Elasticsearch の非同期処理
その他
データ登録時、POSTだと追加、PUTだと追加もしくは既存のデータがあれば更新
クエリに?prettyをつけるとレスポンスのJSONが整形されて出力(見やすくなる)
JSONの最後に余計な , があると怒られる
{
"data1":"AAA",
"data2":"BBB",
}は許されない。最後の , は消しておく。
【参考】
オブジェクトリテラルの末尾のカンマは、ECMAScript 5 から
JSON は ES5 以前の JavaScript 構文に基づいているらしいので、末尾のカンマは使用不可