ES的基本用法


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM