ES的基本概念
1> 集群和節點
一個es集群是由一個或多和es節點組成的集合
每一個集群都有一個名字, 如之前的wali
每個節點都有自己的名字, 如之前的master, slave1, slave2
節點是可以存儲數據, 參與索引數據等的獨立服務
2> 索引(類似於數據庫里面的database)
索引是含有相同屬性的文檔集合
索引在es中是通過一個名字來識別的, 必須是英文字母小寫, 且不含中划線
3> 類型(相當於sql中的table)
一個索引可以定義一個或多個類型, 文檔必須屬於一個類型
4> 文檔(相當於sql中的一行記錄)
文檔是可以被索引的基本數據單位
5> 分片
每個索引都有多個分片, 每個分片都是一個luncene索引
分片的好處: 分攤索引的搜索壓力, 分片還支持水平的拓展和拆分以及分布式的操作, 可以提高搜索和其他處理的效率
6> 備份
拷貝一個分片就完成了分片的備份
備份的好處: 當主分片失敗或者掛掉, 備份就可以代替分片進行操作, 進而提高了es的可用性, 備份的分片還可以進行搜索操作, 以分攤搜索的壓力.
ES在創建索引時, 默認創建5個分片, 一份備份, 可以修改, 分片的數量只能在創建索引的時候指定, 索引創建后就不能修改分片的數量了, 而備份是可以動態修改的
2.2 ES的基本用法
ES以RESTFul風格來命名API的, 其API的基本格式如下
http://<ip>:<port>/<索引>/<類型>/<文檔id>
ES的動作是以http方法來決定的: 常用的http方法: GET/PUT/POST/DELETE
Eg1, 創建索引, 結合head插件創建索引的實例
返回”概覽”查看創建情況
創建索引分為: 結構化創建與非結構化創建
查看索引是否是結構化的方法
Mappings是結構化的一個關鍵詞, 其后內容是空的, 說明這個索引是一個非結構化的索引
創建結構化索引的方法
點擊head插件的”復合查詢”
驗證json后, 提交請求,
返回head插件”概覽查看”
Head插件中編寫json發送請求比較復雜, 可以使用postman或者是fiddler等工具進行請求的發送
請求數據的json格式
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"man": {
"properties": {
"name": {
"type": "text"
},
"country": {
"type": "keyword"
},
"age": {
"type": "integer"
},
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy:MM:dd||epoch_millis"
}
}
},
"woman": {}
}
}
2.2.1> 數據插入
文檔id, 唯一索引值, 指向文檔數據
2.2.1.1 指定文檔id插入
使用http中的put方法,
插入時輸入的ip地址, 如http://192.168.253.129:9200/people/man/1
請求參數依次為:索引名稱/類型名稱/文檔id
請求參數
{
"name": "瓦力",
"country": "China",
"age": 30,
"date": "1987-03-07 12:12:12"
}
Head插件中”數據瀏覽”
2.2.1.2 自動產生文檔id插入
使用http中的post方法,
插入時輸入的ip地址, 如http://192.168.253.129:9200/people/man
請求參數
{
"name": "超重瓦力",
"country": "China",
"age": 40,
"date": "1977-03-07 12:12:12"
}
響應結果
2.2.2> 修改文檔數據
2.2.2.1 直接修改文檔
http方法: post方法
請求地址: http://192.168.253.129:9200/people/man/1/_update
關鍵詞: _update, doc
請求參數
{
"doc": {
"name": "誰是瓦力"
}
}
“doc”為關鍵字, 要修改的文檔放在doc中, 實例修改了type為people索引下man中id為1 的name屬性
返回的結果
可以在head插件中”數據瀏覽”中驗證修改結果
2.2.2.2 腳本修改文檔
通過腳本修改的api格式與直接修改的是一致的
http方法: post方法
請求地址: http://192.168.253.129:9200/people/man/1/_update
請求參數
{
"script": {
"lang": "painless",
"inline": "ctx._source.age += 30"
}
}
關鍵字”script”: 標志以腳本的方式修改文檔
“lang”: 表示以何種腳本語言進行修改, “painless”表示以es內置的腳本語言進行修改. 此外es還支持多種腳本語言, 如Python, js等等
“inline”:指定腳本內容 “ctx”代表es上下文, _source 代表文檔
可以在head插件中”數據瀏覽”檢查修改數據
此外還有其他的參數設置方式, 例如將參數放到外面
{
"script": {
"lang": "painless",
"inline": "ctx._source.name = params.name; ctx._source.age = params.age",
"params": {
"age": 30,
"name": "誰是瓦力"
}
}
}
2.2.3> 刪除
2.2.3.1 刪除文檔
http方法: delete
請求路徑http://192.168.253.129:9200/people/man/1
2.2.3.1 刪除索引
1. 可以通過head插件進行刪除
2. 通過api刪除
Http方法: delete
鏈接地址: http://192.168.253.129:9200/book