Elasticsearch 文法總結
一、Elasticsearch 簡介與啟動
在 Elasticsearch 中,包含多個索引(Index),相應的每個索引可以包含多個類型(Type),這些不同的類型每個都可以存儲多個文檔(Document),每個文檔又有多個屬性。一個索引索引 (index) 類似于傳統關系資料庫 (如 mysql) 中的一個資料庫,是一個存儲關系型文檔的地方。 索引 (index) 的複數詞為 indices 或 indexes。類型 (Type) 相當于傳統關系型資料庫的表,而每一個文檔就相當于傳統關系型資料庫的表中的一行資料。
下載下傳好 es 後,在
bin
目錄下輕按兩下運作
elasticsearch.bat
,通路
http://localhost:9200
,如下結果表示 es 啟動成功。
開啟 es 後占用了 9200 和 9300 兩個端口,其中 9200 是 es 對外提供 restful 接口的端口,9300 是内部端口。
二、Elasticsearch 基礎文法
1、添加資料
PUT /megacorp/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
傳回以下資訊,表示建立成功。
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
其中,_index 為索引名稱,_type 為類型名稱,_version 為該文檔的版本号,初始為 1,每次修改該文檔時 _version 增加 1,_seq_no 為索引的版本号,每次修改了索引下的文檔,被修改的文檔的 _seq_no 和索引目前的 _seq_no 都被更新為修改前索引 _seq_no + 1。
注意: 當請求方法為 POST,且修改前後資料完全一樣時,文檔的 _version 和 _seq_no 都不改變。這種請求方式的寫法為:
POST /${index}/${type}/${_id}/_update
,
請求體格式為:
{
"doc":{
"first_name": "Bob"
}
}
_id 為添加資料時自己設定的,如上
PUT /megacorp/employee/1
中的 1 就是自己設定的字段 _id,也可以在添加字段的時候不設定 _id 值,這時系統會預設傳回一個字元串類型的 _id 值。
注意: 此時請求方式不能為
PUT
,應當為
POST
,否則會傳回 405 報錯。
2、查詢資料
查詢索引為
megacorp
下的全部文檔。
GET /megacorp/_search
查詢索引為
megacorp
下的類型名為
employee
的全部文檔。
GET /megacorp/employee/_search
根據 _id 來準确查詢文檔。
GET /megacorp/employee/1
為查詢方法加上參數,參數的 key 和 value 之間用 : 分隔。
GET /megacorp/employee/_search?q=last_name:Smith
将查詢參數放在請求體中。
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
3、更新資料
更新資料和插入資料又可以用 PUT 和 POST 兩種請求方式,且兩種請求方式都可以用一下格式來更新資料:
- PUT/POST
請求方法體同插入資料, 邏輯上等同于将用資料将原資料覆寫掉。如:/megacorp/employee/_id
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
POST 還可以通過
POST /megacorp/employee/_id/_update
格式來修改資料,此時請求體格式應當為:
{
"doc":{
"first_name": "Taoqiang"
}
}
将要修改的字段和新的值放在 doc 中,多個字段用逗号分隔。
4、删除資料
- 删除整個索引的資料
DELETE /megacorp
- 删除指定 _id 的資料
正确删除後傳回以下類型資料:DELETE /megacorp/employee/_id
{
"_index": "megacorp",
"_type": "employee",
"_id": "5",
"_version": 2,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 11,
"_primary_term": 1
}