天天看點

Elasticsearch 基礎文法總結Elasticsearch 文法總結

Elasticsearch 文法總結

一、Elasticsearch 簡介與啟動

在 Elasticsearch 中,包含多個索引(Index),相應的每個索引可以包含多個類型(Type),這些不同的類型每個都可以存儲多個文檔(Document),每個文檔又有多個屬性。一個索引索引 (index) 類似于傳統關系資料庫 (如 mysql) 中的一個資料庫,是一個存儲關系型文檔的地方。 索引 (index) 的複數詞為 indices 或 indexes。類型 (Type) 相當于傳統關系型資料庫的表,而每一個文檔就相當于傳統關系型資料庫的表中的一行資料。

下載下傳好 es 後,在

bin

目錄下輕按兩下運作

elasticsearch.bat

,通路

http://localhost:9200

,如下結果表示 es 啟動成功。

Elasticsearch 基礎文法總結Elasticsearch 文法總結

開啟 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
}