Elasticsearch を Homebrew で macOS 上に構築



# 環境

2020/10/2
Elasticsearch7
Homebrew 2.5.2

---

# 参考

[Install Elasticsearch on macOS with Homebrew | Elasticsearch Reference [7.9] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/current/brew.html)


# Install

## 


Homebrewでインストールするには、最初にElasticHomebrewリポジトリをタップする必要があります。
Elastic Homebrewリポジトリをタップしたら、brewinstallを使用してElasticsearchのデフォルトのディストリビューションをインストールできます。

```
brew tap elastic/tap

brew install elastic/tap/elasticsearch-full
```



## 設定

Elasticsearchには3つの構成ファイルがあります。

- `elasticsearch.yml` for configuring Elasticsearch
- `jvm.options` for configuring Elasticsearch JVM settings
- `log4j2.properties` for configuring Elasticsearch logging


これらのファイルはconfigディレクトリにあります。
Homebrewでインストールした場合、`/usr/local/etc/elasticsearch/` に作成されました。


Configファイルの説明は[ここに](https://www.elastic.co/guide/en/elasticsearch/reference/current/settings.html#settings)あります


## 動作

設定ファイルを配置するフォルダを作成（どこでもよい）

作成したフォルダに移動して、
デフォルトの設定ファイルから最低限必要なものをコピーします。

```
cp /usr/local/etc/elasticsearch/elasticsearch.yml .
cp /usr/local/etc/elasticsearch/jvm.options .
cp /usr/local/etc/elasticsearch/log4j2.properties .
```



### elasticsearch.yml

elasticsearch.yml の内容を以下のように書き換える。

※ `your user name`は適宜変更する


```:elasticsearch.yml
cluster:
  name: mycluster
node:
  name: mynode
network:
  host: localhost
path:
  data: /Users/your user name/elastic_stack/data/
  logs: /Users/your user name/elastic_stack/log/
```


### 環境変数
  
  
環境変数 ES_PATH_CONF に上記で作成したフォルダをセットする
※ `your user name`は適宜変更する

```
export ES_PATH_CONF=/Users/your user name/elastic_stack/elastic_local
```


環境変数を表示する

```
export -p

echo $ES_PATH_CONF
```



  
## Elasticsearch の起動


elasticsearch コマンドで起動する

```
elasticsearch
```


確認

```
curl http://localhost:9200/
```


result

```
{
  "name" : "mynode",
  "cluster_name" : "mycluster",
  "cluster_uuid" : "2bxVVndhT3qYmc410DSmDA",
  "version" : {
    "number" : "7.9.2",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "d34da0ea4a966c4e49417f2da2f244e3e97b4e6e",
    "build_date" : "2020-09-23T00:45:33.626720Z",
    "build_snapshot" : false,
    "lucene_version" : "8.6.2",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
```



# kibana

## install

```
brew install kibana
```



## Kibana起動する


起動

```
kibana

```


```
...省略
==> kibana
Config: /usr/local/etc/kibana/
If you wish to preserve your plugins upon upgrade, make a copy of
/usr/local/opt/kibana/plugins before upgrading, and copy it into the
new keg location after upgrading.

To have launchd start kibana now and restart at login:
  brew services start kibana
Or, if you don't want/need a background service you can just run:
  kibana
```


http://localhost:5601

  
![スクリーンショット 2020-10-02 20.03.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49910/620c8890-a408-555d-fb2b-7ddeee396b9c.png "スクリーンショット 2020-10-02 20.03.36.png")
  


# データの追加

## インデックスの作成

`foo_index` というインデックスを作成する。


```
curl --include -XPUT "http://localhost:9200/foo_index?pretty"
```

result

```:result
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "foo_index"
}
```


## 結果確認

```
curl --include -XGET "http://localhost:9200/foo_index?pretty"
```

result

```:result
{
  "foo_index" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "creation_date" : "1601883316655",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "KMD3KGVMSNSJEtUEJBT-xg",
        "version" : {
          "created" : "7090299"
        },
        "provided_name" : "foo_index"
      }
    }
  }
}
```



## ドキュメントの追加

```
curl --include -XPOST "http://localhost:9200/foo_index/_doc?pretty" \
-H 'Content-Type: application/json' \
-d '{
  "foo_user": "Alice",
  "foo_message": "The night was young, and so was he. But the night was sweet, and he was sour."
}'
```

result

```:result
HTTP/1.1 201 Created
Location: /foo_index/_doc/i32x93QByjoFzGo__-wj
content-type: application/json; charset=UTF-8
content-length: 242
```

`i32x93QByjoFzGo__-wj` というIDが生成された。


### 結果確認

```
curl --include -XGET "http://localhost:9200/foo_index/_doc/i32x93QByjoFzGo__-wj?pretty"
```

result

```:result
{
  "_index" : "foo_index",
  "_type" : "_doc",
  "_id" : "i32x93QByjoFzGo__-wj",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "foo_user" : "Alice",
    "foo_message" : "The night was young, and so was he. But the night was sweet, and he was sour."
  }
}
```


## 2つ目のドキュメントも追加


```
curl --include -XPOST "http://localhost:9200/foo_index/_doc?pretty" \
-H 'Content-Type: application/json' \
-d '{
  "foo_user": "ボブ",
  "foo_message": "夜は若く、彼も若かった。が、夜の空気は甘いのに、彼の気分は苦かった。"
}'
```

result

```:result
HTTP/1.1 201 Created
Location: /foo_index/_doc/jH2193QByjoFzGo_t-w7
content-type: application/json; charset=UTF-8
content-length: 242
```



### 結果確認

```
curl --include -XGET "http://localhost:9200/foo_index/_doc/jH2193QByjoFzGo_t-w7?pretty"
```

result

```:result
{
  "_index" : "foo_index",
  "_type" : "_doc",
  "_id" : "jH2193QByjoFzGo_t-w7",
  "_version" : 1,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "foo_user" : "ボブ",
    "foo_message" : "夜は若く、彼も若かった。が、夜の空気は甘いのに、彼の気分は苦かった。"
  }
}
```



# データの全文検索


foo_message フィールドに「夜の空気」が含まれるドキュメントを検索するクエリを実行する。

```
curl --include -XGET "http://localhost:9200/foo_index/_search?pretty" \
-H 'Content-Type: application/json' \
-d '
{
  "query": {
    "match": {
      "foo_message": "夜の空気"
    }
  }
}'
```

result

```:result
{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 3.4337347,
    "hits" : [
      {
        "_index" : "foo_index",
        "_type" : "_doc",
        "_id" : "jH2193QByjoFzGo_t-w7",
        "_score" : 3.4337347,
        "_source" : {
          "foo_user" : "ボブ",
          "foo_message" : "夜は若く、彼も若かった。が、夜の空気は甘いのに、彼の気分は苦かった。"
        }
      }
    ]
  }
}
```






# 参考

[Elasticsearch 7 を macOS 上に構築して全文検索をする - Qiita](https://qiita.com/niwasawa/items/f8a21f1b3b10a138af77)

[Configuring Elasticsearch | Elasticsearch Reference [master] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/master/settings.html)