Elasticsearch復習
以下の本を買った。
かなり良いので気になる人は買ってほしい。
良く使うqueryとaggregationやへーと思ったことを書く。
shardsとreplicas
shardsは、インデックスのproperties一つ一つのこと。別名P。
で、こいつのコピーがreplica(s)。
clusterがあって、そこにnodeが3くらい、Pが全体で5個くらいある状況を想像してほしい。
node1が死んじゃったらnode1にあるPが危なくなるでしょ。そうならないよう、各nodeにPのコピーであるreplicaをそれぞれ配置する。
そうすることでデータの損失を防ぎやすくなる。
CRUD operations
Elasticsearchに投入されたデータは、以下のAPIを通じて操作ができる。
各種説明する。
Index API
データをElasticsearchに登録(インデックス)する
その方法は以下の通りある。
- ドキュメントにIDを与える
- ドキュメントにIDを与えない
1.2.ともに以下の書き方が共通となる
PUT(or POST) /index_name/document_type/id
1.について
PUT /index_name/document_type/id
2.について
POST /index_name/document_type/
Get API
ドキュメントIDを既に知っている場合、Elasticsearchからデータを取得するのに有効
GET /index_name/document_type/id
Update API
ドキュメントの更新に利用
POST /index_name/document_type/id/_update
Delete API
ドキュメントの削除に利用
DELETE /index_name/document_type/id
インデックスとマッピングの作成方法
以下のようにして、indexのsettingを行う PUT /index_name { "settings":{ "index":{ "number_of_sharads":5, "number_of_replicas":2 } } } settingとmappingを同時に設定することもできる PUT /index_name { "settings":{ "index":{ "number_of_shards":5, "number_of_replicas":2 } }, "mappings":{ "document_type":{ "properties":{ "column1_name":{ "type":"something" }, "column2_name":{ "type":"something" } } } } } 既存のインデックスに対して、マッピングを追加することもできる PUT /index_name/_mapping/document_type { "properties":{ "column_name":{ "type":"something" } } } 追加したインデックスに対してデータを追加する POST index_name/document_type { "column_name":"something" }
descriptionとdescription.keywordの違い
以下のクエリがあるとする
{ "index_name":{ "mappings":{ "document_type":{ "properties":{ "description":{ "type":"text", "fields":{ "keyword":{ "type":"descrption.keyword" } } }, "name":{ "type":"text" } } } } } }
key.wordは何らかの分析を受けない
マッピングの更新
PUT /index_name/_mapping/document_type { "properties": { "index_name": { "mapping_name": { "properties": { "code": { "type":keyword" } } } } } }
REST API
以下色々ある
- Document APIs
- Search APIs
- Aggregations APIs
- Indices APIs
- Cluster APIs
- cat APIs
Json response
pretty=trueにすると、GETしたときの情報がjson形式で戻されるため、人間が見やすい
Multiple indices
インデックス検索
Elasticsearchに登録したデータのあらゆるインデックスを検索する
GET /_search
ただし、表示されるのはデフォルト10件のため、表示件数を多くしたい場合
GET /_search { "size":num }
とsizeを指定すること。
また返却される項目で見ておきたいものは以下となる。
- took: どれだけ時間がかかったかを表す
- timed_out:false: タイムアウトなしで結果を得られたことを示す
- _shards: 検索の成否にかかわらず、クラスタ全体でどれだけのshardsをまたがったかを示す
- hits: 実際にマッチしたドキュメントの数を示す
一つのインデックスで全てのドキュメントを検索する
GET index_name/_search
一つのインデックスでかつドキュメントタイプを指定して全てのドキュメントを検索する
GET index_name/document_type/_search
複数のインデックスから全件検索をする
GET index_name, index2_name/_search
はーい、クエリやaggregationまでまとめられず今度また更新しましょう。