よく使うElasticSearchのクエリ（インデックス操作）

ElasticSearchは、マニュアル（英語）がしっかりしてるので、そっちを参考にしてください。
マニュアル（本家）：https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

とりあえず、理解しやすく、MySQLのSQL文と比較しながら、まとめます。


## 環境

* CentOS 7.1
* ElasticSearch 5.6.2<br>
  ※ElasticSearch 6.xでは、curlに「 -H 'Content-Type: application/json'」を付ける必要があります。


## 目次

* インデックス（マッピング）操作
* [ドキュメント（レコード）操作](https://qiita.com/nakazii-co-jp/items/d8dca15e5eab6406ffdb)
* [データ取得](https://qiita.com/nakazii-co-jp/items/997a980f34bce5440628)
* [スナップショット](https://qiita.com/nakazii-co-jp/items/908b6a44e41f176abb8f)
* [elasticdump（インポート／エクスポート）](https://qiita.com/nakazii-co-jp/items/3199433d685d0600c6d6)


## インデックス（マッピング）操作

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices.html

### ■ インデックス作成
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html
※ただ、わざわざ、インデックスを作らなくても、データを登録すると勝手に作られる。

```bash:elasticsearch
curl -XPUT http://localhost:9200/hoge_index?pretty
```
```mysql:MySQL
CREATE DATABASE hoge_index
```


### ■ インデックス作成＆マッピングの定義
```hoge_mapping.json
{
    "mappings" : {
        "hoge_type" : {
            "properties" : {
                "id" : { "type" : "long", "store" : "yes" },
                "hoge_field_1" : { "type" : "string", "store" : "yes", "index" : "analyzed" },
                "hoge_field_2" : { "type" : "string", "store" : "yes", "index" : "analyzed" },
                "hoge_field_3" : { "type" : "string", "store" : "yes", "index" : "analyzed" }
            }
        }
    }
}
```
```bash:elasticsearch
curl -XPUT 'http://localhost:9200/hoge_index?pretty' -d @hoge_mapping.json
```

### ■ インデックスの削除
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-index.html

```bash:elasticsearch
curl -XDELETE http://localhost:9200/hoge_index?pretty
```

```mysql:MySQL
DROP DATABASE hoge_index
```


### ■ 全インデックスの削除

```bash:elasticsearch
curl -XDELETE http://localhost:9200/*?pretty
```


### ■ インデックスの一覧

```bash:elasticsearch
curl -XGET http://localhost:9200/_aliases?pretty
```

```mysql:MySQL
SHOW TABLES
```

### ■ インデックスの存在チェック

```bash:elasticsearch
curl -IHEAD 'http://localhost:9200/hoge_index'
```

```bash:bashでチェックする方法
ret=`curl -s -IHEAD 'http://localhost:9200/hoge_index'`
if [ "`echo $ret | grep '200 OK'`" ]; then
  echo "200 OK"
fi
```


### ■ エイリアス

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html

#### ・エイリアスの追加

```bash:elasticsearch
curl -XPOST 'http://localhost:9200/_aliases?pretty' -d '{
  "actions" : [
    { "add" : { "index" : "hoge_index", "alias" : "hoge" } }
  ]
}'
```
#### ・エイリアスの削除

```bash:elasticsearch
curl -XPOST 'http://localhost:9200/_aliases?pretty' -d '{
  "actions" : [
    { "remove" : { "index" : "hoge_index", "alias" : "hoge" } }
  ]
}'
```


## 参考
 * [elasticsearch-php documents](https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html)
 * http://morizyun.github.io/blog/elasticsearch-server-basic-api/ (mappingについて)
 * http://qiita.com/4cteru/items/074d8dc956103c36b7fa (bulkについて)
 * https://medium.com/hello-elasticsearch/elasticsearch-9a8743746467 (mappingについて)
 * http://qiita.com/kompiro/items/5abeae93dc386ab669bf (mappingについて)
 * https://medium.com/hello-elasticsearch/elasticsearch-c8c9c711f40 (エイリアス)
 *