一、基本說明
在ES中,文檔歸屬於一種類型(type),而這些類型存在於索引(index)中。文檔,索引,與ES文檔庫的關係可以如下圖所示:
每一條ES中的數據,都是一條json格式的字符串,這些數據不僅包含我們所添加的數據,還包含有一個三個元數據 _index(索引),_type(對象的類),_id(唯一標識主鍵)。
我們在創建ES的數據時,可以不去單獨進行索引與文檔類型的創建操作。只需要在進行添加數據時,說明要存儲的索引與文檔名稱即可,可參見第二部分中的數據新增。
二、數據新增與修改
數據進行新增時,可以使用下方的請求來進行數據新增:
請求方式:PUT
URL:http://192.168.1.199:9200/megacorp/employee/1
Header:Content-Type:application/json
Body:
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 30,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ],
"birthday": "1989-02-02"
}
說明:
URL:megacorp/employee/1 分別爲 {索引}/{文檔類型}/{id}
Body:具體的數據內容,json格式的字符串信息。
我們可以任意的定義索引與文檔類型以及id,如果索引與文檔類型不存在,ES則會創建出相應的索引與文檔類型,新增到庫中。數據的id,是數據的唯一主鍵,id+索引+文檔類型是全局唯一的。在新增數據時,不可以使其重複,如果出現重複則會將原本的舊數據覆蓋。
如果在新增時,不希望設置主鍵,可以將請求方式修改爲POST請求,並去掉末尾的Id,在新增數據時,ES就會自己生成一個字符串唯一Id。請求方式如下:
請求方式:POST
URL:http://192.168.1.199:9200/megacorp/employee
Header:Content-Type:application/json
Body:
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 30,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ],
"birthday": "1989-02-02"
}
查詢得出的結果中,Id如下:
7KtG5mgBlW1hvtUzqtXv
三、簡單數據查詢
首先,我們在我們的庫中添加兩條新的數據,Pony Ma和Jack Ma請求如下方所示:
請求方式:PUT
URL:http://192.168.1.199:9200/megacorp/employee/2
Header:Content-Type:application/json
Body:
{
"first_name": "Jack",
"last_name": "Ma",
"age": 30,
"about": "I regret having founded alibaba",
"interests": [
"speech"
],
"birthday": "1989-01-01"
}
請求方式:PUT
URL:http://192.168.1.199:9200/megacorp/employee/3
Header:Content-Type:application/json
Body:
{
"first_name" : "Pony",
"last_name" : "Ma",
"age" : 29,
"about" : "Making money makes you happy",
"interests": [ "A low profile" ],
"birthday" : "1990-01-01"
}
在我們將數據新增到了ES中以後,就可以使用GET請求進行單條數據的查詢了。
請求方式:GET
URL:http://192.168.1.199:9200/megacorp/employee/1
說明:megacorp/employee/1 分別爲 {索引}/{文檔類型}/{id}
下方爲響應Body:
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_version": 5,
"found": true,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 30,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
}
在上方的響應中,_source內的內容即爲查詢結果,最初添加到ES中的id爲1的json串數據。如果使用下方URL進行請求,則可以獲取到最早的十條數據,這裏是用_search替代了原本位置的id。
URL:http://192.168.1.199:9200/megacorp/employee/_search
如果我們需要查詢一些特殊的數據時,例如last_name包含有Ma的用戶,則可以使用下方的URL進行查詢。
URL:http://192.168.1.199:9200/megacorp/employee/_search?q=last_name:Ma
如果我們需要的只是部分數據,則可以用以下方式進行請求
URL:http://192.168.1.199:9200/megacorp/employee/_search?_source=age,about
如果只需要_source中的數據不需要其他元數據,可以用下方的方式進行請求
URL:http://192.168.1.199:9200/megacorp/employee/_search?_source
四、數據刪除
刪除數據時,使用DELETE請求進行訪問即可。
請求方式:DELETE
URL:http://192.168.1.199:9200/megacorp/employee/1
如果文檔被找到,Elasticsearch將返回200 OK
狀態碼和以下響應體。
{
"found" : true,
"_index" : "website",
"_type" : "blog",
"_id" : "123",
"_version" : 3
}
如果文檔未找到,我們將得到一個404 Not Found
狀態碼,響應體是這樣的:
{
"found" : false,
"_index" : "website",
"_type" : "blog",
"_id" : "123",
"_version" : 4
}