---
# System prepended metadata

title: ElasticSearch
tags: [database, elasticsearch]

---

# ElasticSearch
###### tags: `database` `elasticsearch`
## 1. 安裝

mac上安裝
```bash=
$ brew tap elastic/tap
$ brew install elastic/tap/elasticsearch-full
```
通常ES官配是kibana，可以裝起來一起使用
```bash=
$ brew install elastic/tap/kibana-full
```

啟動就分別在terminal輸入
```bash=
$ elasticsearch
$ kibana
```

## 2. 使用

ES的語法就是敲API。
elasticsearch index = mongo collection = SQL table
>只不過他的同一個詞會拿來當動詞跟名詞使用，像是index可以當成表也可以當成插入…


### 常用方法
> 記得要加伺服器資訊，這邊是localhost


### 1. 增
```
PUT /<index>/_doc/<_id> // 自訂data id
POST /<index>/_doc/ // 預設data id
{data} // 資料內容記得帶進json body裡面
```


### 2. 刪
```
DELETE /<index>/_doc/<_id>
```

### 3. 改
```
POST /<index>/_update/<_id>
{data}
```

### 4. 查
```
GET /<index>/_doc/<_id>
```

## Mapping

除了可以直接插入資料以外，也可以先創造一個index並賦予固定的data type，避免資料type錯誤

創造index並且插入mapping
```
PUT /<index>
{
"mapping": {
    "name": {
        "type": "text"
        }
    }
}
```
另外的[data type](https://www.elastic.co/guide/en/elasticsearch/reference/7.12/mapping-types.html)可以進官方看，真的太多了。


## Pipeline

這是ES比較特別的東西，可以在插入資料時掛上，以豐富資料或是更改資料屬性(有點ETL的味道)。


1. 首先要先創建一個pipeline
```
PUT /_ingest/pipeline/<pipeline>
```

2. 可以查看到你剛剛創的pipeline
```
GET /_ingest/pipeline/<pipeline>
```

3. 使用pipeline
```
PUT /<target>/_doc/<_id>?pipeline=<pipeline>
```
這邊可以看到就是插入後面帶一個param去掛上pipeline

其餘還有很多可以玩的例如IndexLifecycleManagement的部分，還有kibana畫表的功能也非常強大。

![](https://paper-attachments.dropbox.com/s_3D3380C7643888BD21AA9DA53E1C6E3D4DE6A9E2064FE474F905BA3617732B8F_1620632426445_+2021-05-10+3.40.02.png)

