天天看點

【Spring Cloud】ElasticSearch 索引庫及文檔操作

文章目錄

  • ​​十一 、ElasticSearch 索引庫及文檔操作​​
  • ​​11.5 索引庫操作​​
  • ​​5.1 mapping映射屬性​​
  • ​​5.2 索引庫的CRUD​​
  • ​​5.2.1 建立索引庫和映射​​
  • ​​5.2.2 查詢索引庫​​
  • ​​5.2.3 修改索引庫​​
  • ​​5.2.4 删除索引庫​​
  • ​​5.2.5 總結​​
  • ​​11.6 文檔操作​​
  • ​​6.1 新增文檔​​
  • ​​6.2 查詢文檔​​
  • ​​6.3 删除文檔​​
  • ​​6.4 修改文檔​​
  • ​​6.4.1 全量修改​​
  • ​​6.4.2 增量修改​​
  • ​​6.5 總結​​

十一 、ElasticSearch 索引庫及文檔操作

11.5 索引庫操作

索引庫就類似資料庫表,mapping 映射就類似表的結構。我們要向 es中存儲資料,必須先建立“庫”和“表”。

5.1 mapping映射屬性

​mapping​

​是對索引庫中文檔的限制,常見的mapping屬性包括:

  • type:字段資料類型,常見的簡單類型有:
  • 字元串:​

    ​text​

    ​(可分詞的文本)、​

    ​keyword​

    ​(精确值,例如:品牌、國家、ip位址)
  • 數值:​

    ​long​

    ​、​

    ​integer​

    ​、​

    ​short​

    ​、​

    ​byte​

    ​、​

    ​double​

    ​、​

    ​float​

  • 布爾:​

    ​boolean​

  • 日期:​

    ​date​

  • 對象:​

    ​object​

  • index:是否建立索引,預設為​

    ​true​

  • analyzer:使用哪種分詞器
  • properties:該字段的子字段

例如下面的​

​json​

​文檔:

{
    "age": 21,
    "weight": 52.1,
    "isMarried": false,
    "info": "程式員Java講師",
    "email": "[email protected]",
    "score": [99.1, 99.5, 98.9],
    "name": {
        "firstName": "雲",
        "lastName": "趙"
    }
}      

對應的每個字段映射(mapping):

  • age:類型為 integer;參與搜尋,是以需要index為true;無需分詞器
  • weight:類型為float;參與搜尋,是以需要index為true;無需分詞器
  • isMarried:類型為boolean;參與搜尋,是以需要index為true;無需分詞器
  • info:類型為字元串,需要分詞,是以是text;參與搜尋,是以需要index為true;分詞器可以用ik_smart
  • email:類型為字元串,但是不需要分詞,是以是keyword;不參與搜尋,是以需要index為false;無需分詞器
  • score:雖然是數組,但是我們隻看元素的類型,類型為float;參與搜尋,是以需要index為true;無需分詞器
  • name:類型為object,需要定義多個子屬性
  • name.firstName;類型為字元串,但是不需要分詞,是以是keyword;參與搜尋,是以需要index為true;無需分詞器
  • name.lastName;類型為字元串,但是不需要分詞,是以是keyword;參與搜尋,是以需要index為true;無需分詞器

​​傳回頂部​​

5.2 索引庫的CRUD

5.2.1 建立索引庫和映射

基本文法

  • 請求方式:​

    ​PUT​

  • 請求路徑:​

    ​/索引庫名​

    ​,可以自定義
  • 請求參數:​

    ​mapping映射​

格式:

PUT /索引庫名稱
{
  "mappings": {
    "properties": {
      "字段名":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "字段名2":{
        "type": "keyword",
        "index": "false"
      },
      "字段名3":{
        "properties": {
          "子字段": {
            "type": "keyword"
          }
        }
      },
      // ...略
    }
  }
}      

示例:

# 建立索引庫
PUT /zyx
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type": "keyword",
        "index": false
      },
      "name":{
        "type": "object",
        "properties": {
          "firstName": {
             "type": "keyword" 
          },
          "lastName": {
             "type": "keyword" 
          }
        }
      }
    }
  }
}      
【Spring Cloud】ElasticSearch 索引庫及文檔操作

​​傳回頂部​​

5.2.2 查詢索引庫

基本文法:

  • 請求方式:GET
  • 請求路徑:/索引庫名
  • 請求參數:無

格式:

GET /索引庫名      

示例:

【Spring Cloud】ElasticSearch 索引庫及文檔操作

​​傳回頂部​​

5.2.3 修改索引庫

反向索引結構雖然不複雜,但是一旦資料結構改變(比如改變了分詞器),就需要重新建立反向索引,這簡直是災難。是以索引庫一旦建立,無法修改mapping。

雖然無法修改mapping中已有的字段,但是卻允許添加新的字段到mapping中,因為不會對反向索引産生影響。

文法說明:

PUT /索引庫名/_mapping
{
  "properties": {
    "新字段名":{
      "type": "integer"
    }
  }
}      

示例:

【Spring Cloud】ElasticSearch 索引庫及文檔操作

​​傳回頂部​​

5.2.4 删除索引庫

文法:

  • 請求方式:​

    ​DELETE​

  • 請求路徑:/索引庫名
  • 請求參數:無

格式:

DELETE /索引庫名      

在kibana中測試:

【Spring Cloud】ElasticSearch 索引庫及文檔操作

5.2.5 總結

索引庫操作

  • 建立索引庫:​

    ​PUT /索引庫名​

  • 查詢索引庫:​

    ​GET /索引庫名​

  • 删除索引庫:​

    ​DELETE /索引庫名​

  • 添加字段:​

    ​PUT /索引庫名/_mapping​

​​傳回頂部​​

11.6 文檔操作

6.1 新增文檔

文法:

POST /索引庫名/_doc/文檔id
{
    "字段1": "值1",
    "字段2": "值2",
    "字段3": {
        "子屬性1": "值3",
        "子屬性2": "值4"
    },
    // ...
}      

示例:

POST /zyx/_doc/1
{
    "info": "程式員Java講師",
    "email": "[email protected]",
    "name": {
        "firstName": "雲",
        "lastName": "趙"
    }
}      

響應:

【Spring Cloud】ElasticSearch 索引庫及文檔操作

​​傳回頂部​​

6.2 查詢文檔

根據​

​rest風格​

​,新增是​

​post​

​,查詢應該是​

​get​

​,不過查詢一般都需要條件,這裡我們把​

​文檔id​

​帶上。

文法:

GET /{索引庫名稱}/_doc/{id}      

通過kibana檢視資料:

GET /zyx/_doc/1      

檢視結果:

【Spring Cloud】ElasticSearch 索引庫及文檔操作

​​傳回頂部​​

6.3 删除文檔

删除使用​

​DELETE​

​請求,同樣,需要根據​

​id​

​進行删除:

文法:

DELETE /{索引庫名}/_doc/id值      

示例:

# 根據id删除資料
DELETE /zyx/_doc/1      

結果:

【Spring Cloud】ElasticSearch 索引庫及文檔操作

​​傳回頂部​​

6.4 修改文檔

修改有兩種方式:

  • 全量修改:直接覆寫原來的文檔
  • 增量修改:修改文檔中的部分字段

6.4.1 全量修改

全量修改是覆寫原來的文檔,其本質是:

  • 根據指定的 ​

    ​id​

    ​删除文檔
  • 新增一個相同 ​

    ​id​

    ​ 的文檔

注意:如果根據​

​id​

​删除時,​

​id​

​不存在,第二步的新增也會執行,也就從修改變成了新增操作了。

文法:

PUT /{索引庫名}/_doc/文檔id
{
    "字段1": "值1",
    "字段2": "值2",
    // ... \略
}      

示例:

PUT /zyx/_doc/1
{
    "info": "程式員進階MySQL講師",
    "email": "[email protected]",
    "name": {
        "firstName": "雲",
        "lastName": "趙"
    }
}      
【Spring Cloud】ElasticSearch 索引庫及文檔操作

​​傳回頂部​​

6.4.2 增量修改

增量修改是隻修改指定id比對的文檔中的部分字段。

文法:

POST /{索引庫名}/_update/文檔id
{
    "doc": {
         "字段名": "新的值",
    }
}      

示例:

POST /zyx/_update/1
{
  "doc": {
    "email": "[email protected]"
  }
}      
【Spring Cloud】ElasticSearch 索引庫及文檔操作

​​傳回頂部​​

6.5 總結

  • 建立文檔:​

    ​POST /{索引庫名}/_doc/文檔id { json文檔 }​

  • 查詢文檔:​

    ​GET /{索引庫名}/_doc/文檔id​

  • 删除文檔:​

    ​DELETE /{索引庫名}/_doc/文檔id​

  • 修改文檔:
  • 全量修改:​

    ​PUT /{索引庫名}/_doc/文檔id { json文檔 }​

  • 增量修改:​

    ​POST /{索引庫名}/_update/文檔id { "doc": {字段}}​

繼續閱讀