jangajan.com

仕事で使っているので、elasticsearchとは、どう使うのかというところを学んでいきます。
とりあえず、Getting Startこなしていきます。

Elasticsearchって?

REST APIでアクセスする、スケーラブルなオープンソースのテキスト検索・解析エンジンです。 elasticsearchはindexのデータベース(スキーマレスなデータベース)を持っていて、それに対してREST API経由でアクセスしていきます。

どうやって使うの?

@@@インストール方法・起動方法の記事を準備@@@
以下に、REST APIを利用した場合のindexのデータベースへのアクセス方法を示します。
が、その前に用語を3つだけRDBにたとえてみます。

用語意味
indexRDBでいうところのDatabase
typeRDBでいうところのTable
documentRDBでいうところのRecord

indexを作成

今回はコマンドライン上から、curlコマンドを使ってelasticsearchにアクセスしていきます。

# customerというindexをhttpリクエストで作成
$ curl -XPUT 'localhost:9200/customer?pretty'
# 標準出力の結果
{
  "acknowledged" : true
}
  • curlコマンドを利用してhttpのリクエストを投げる
  • -XオプションでPUTメソッドを利用する
  • prettyは出力結果を整形してくれるだけなので、つけなくても問題ない
  • レスポンスはJSON形式です。

さて、次はindexができたか確認してみます。

indexの一覧を取得

以下のコマンドでindexの一覧を取得します。単に情報を取得する場合はGETメソッドを利用します。REST APIですね。

蛇足ですが、curl: (7) Failed to connect to localhost port 9200: Connection refusedが発生する場合、--ipv4をつけてみてください。

$ curl -XGET 'localhost:9200/_cat/indices?v'

一覧の中にcustomerがいれば、indexの作成成功です。
続いて実際のデータとなるdocumentを登録してみましょう。

documentを登録

登録するdocumentは以下です。

キー
nameJohn Doe
$ curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
quote> {
quote>   "name": "John Doe"
quote> }'
  • urlは/customer/external/1と指定します。
    • customerはindexですね。
    • では次のexternalはなんでしょうか。これが、typeです。個人的にはtableというより、一般的なカテゴリーに近いのかなって気がします。
    • 最後の1はdocumentのIDです。つけないやり方もあります。
  • -dオプション(-data)でdocumentのデータを連想配列形式で記述します。

ではdocumentが登録できたのか確認してみましょう。

documentを取得

indexの一覧の取得方法と、documentの登録方法から、URLの意味は汲み取れると思います。customerindexのexternaltypeのIDが1のdocumentを取得する(GET)というリクエストです。

$ curl -XGET 'localhost:9200/customer/external/1?pretty'
# 標準出力の結果
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source":
    {
      "name": "John Doe"
    }
}
  • documentが見つかると、foundtrue
  • 取得したdocumentの内容は_sourceをキーにした連想配列

無事に取得できました!でも、登録したdocumentの内容が間違っていました。よくあることですね、直しましょう。

documentを更新

更新のリクエストはdocumentを登録する時と、nameの値以外全て一緒です。

$ curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '
quote> {
quote>   "name": "Jane Doe"
quote> }'
{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 2,
  "created" : false
}
  • すでに存在するdocumentに対するPUTの場合は
    • _versionが+1
    • createdfalse

もう一度、documentを取得してみてください。documentが更新されていることを確認できると思います。イエイ。

ところが、登録したdocument、実はいらないデータでした。消しましょう。

documentを削除

削除の時はDELETEメソッドを使います。

$ curl -XDELETE 'localhost:9200/customer/external/1?pretty'
{
  "found" : true,
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 2
}

documentを取得してみてください。存在しないため、foundfalse担っているともいます。

実際にリクエストを投げながら使うことで、elasticsearchに、どうアクセスして、どんな結果が返ってくるのかイメージできてきたと思います。

© 2020, Built with Gatsbyby @ta1kt0me