Rest 風格說明

HuDu發表於2020-11-13

Rest 風格說明

一種軟體架構風格,而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和伺服器互動類的軟體。基於這個風格設計的軟體可以更簡潔,更有層次,更易於實現快取等機制。

基本的Rest命令說明:

method url地址 描述
PUT localhost:9200/索引名稱/型別名稱/文件id 建立文件(指定文件id)
POST localhost:9200/索引名稱/型別名稱 建立文件(隨機文件id )
POST localhost:9200/索引名稱/型別名稱/文件id/_update 修改文件
DELETE localhost:9200/索引名稱/型別名稱/文件id 刪除文件
GET localhost:9200/索引名稱/型別名稱/文件id 查詢文件通過文件id
POST localhost:9200/索引名稱/型別名稱/_search 查詢所有資料

基礎測試

  • 關於索引的基本操作

1、建立一個索引

PUT /索引名/~型別名~/文件id
{請求體}

Rest 風格說明

2、完成了自動增加索引!資料也成功的新增了,這就是我說大家在初期可以把它當作資料庫學習的原因
Rest 風格說明

3、name這個欄位用不用指定型別呢。畢竟我們關係型資料庫是需要指定型別的

  • 字串型別
    text、keyword
  • 數值型別
    long,integer,short,byte,double,float,half float,scaled float
  • 日期型別
    date
  • 布林值型別
    boolean
  • 二進位制型別
    binary
  • 等等。。。

4、指定欄位的型別

建立規則
Rest 風格說明

獲得這個規則!通過GET請求獲得具體的資訊!

Rest 風格說明

5、檢視預設的資訊

Rest 風格說明

如果自己的文件欄位沒有指定,那麼es就會給我們預設配置欄位型別
Rest 風格說明

擴充:通過elasticsearch索引情況,通過get _cat/ 可以獲得es的當前的很多資訊

Rest 風格說明

修改 提交還是使用 PUT 即可,然後覆蓋

之前的方法
Rest 風格說明
新的方法

Rest 風格說明

PUT /test1/type1/1
{
  "name": "hudu",
  "age": 3
}

PUT /test2/
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "long"
      },
      "birthday": {
        "type": "date"
      }
    }
  }
}

GET test2

PUT /test3/_doc/1
{
  "name": "弧度孤鬼",
  "age": 22,
  "birth": "1998-06-01"
}

GET test3

GET _cat/health

GET _cat/indices?v

PUT /test3/_doc/1
{
  "name": "弧度孤鬼123",
  "age": 22,
  "birth": "1998-06-01"
}

POST /test3/_doc/1/_update
{
  "doc":{
    "name": "張三"
  }
}

DELETE test1

刪除索引

通過DELETE命令實現刪除、根據你的請求來判斷刪除的是索引還是刪除文件記錄
使用restful風格是我們es推薦的

關於文件的基本操作(重點)

基本操作

1、新增資料

PUT /hudu/user/1
{
  "name": "HUDU",
  "age": 22,
  "desc": "測試",
  "tags": ["宅","夜貓子","開發"]
}

Rest 風格說明

Rest 風格說明

2、獲取資料 GET

GET hudu/user/1

Rest 風格說明

3、更新資料 PUT
put如果不傳值,會被覆蓋,值會為空,推薦使用POST方式更新資料。
Rest 風格說明

4、POST _update,推薦使用這種更新方式

Rest 風格說明

Rest 風格說明

5、簡單的搜尋
通過id查詢

GET hudu/user/1

簡單的條件查詢可以根據預設的對映規則,產生基本的查詢!

Rest 風格說明

GET hudu/user/_search?q=name:

Rest 風格說明

複雜操作搜尋 select(排序,分頁,高亮,模糊查詢,精準查詢)

GET /hudu/user/_search
{
    "query":{
        "match": {
            "name": "李"
        }
    }
}

Rest 風格說明
測試資料
Rest 風格說明

Rest 風格說明

輸出結構,不想要那麼多

Rest 風格說明
我們之後使用Java操作es,所有的方法和物件就是在這裡面的key

Rest 風格說明

分頁查詢


GET hudu/user/_search
{
  "query": {
    "match": {
      "name": "李"
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 1
}

Rest 風格說明
資料下標還是從0開始,和學的所有的資料結構是一樣的
/search/{current}/{pagesize}

布林值查詢

多條件查詢
must(and),所有的條件都要符合 where id=1 and name=xxx
Rest 風格說明
should(or),所有的條件都要符合 where id=1 or name=xxx

Rest 風格說明
must_not

Rest 風格說明

過濾器 filter

GET hudu/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "李"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 10, 
            "lte": 30
          }
        }
      }
    }
  }
}

Rest 風格說明

  • gt 大於
  • gte(greater than equal) 大於等於
  • lt 小於
  • lte(less than equal) 小於等於

匹配多個條件

GET hudu/user/_search
{
  "query": {
    "match": {
      "tags": "宅 開發"
    }
  }
}

Rest 風格說明

精確查詢

term查詢是直接通過倒排索引指定的詞條進行精確的查詢的!
關於分詞:

  • term,直接查詢精確的
  • match,會使用分詞器分析!(先分析文件,然後再通過分析的文件進行查詢!)

兩個型別 text keyword

PUT testdb
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "desc": {
        "type": "keyword"
      }
    }
  }
}

PUT testdb/_doc/1
{
  "name": "弧度 name",
  "desc": "弧度 desc"
}

PUT testdb/_doc/2
{
  "name": "弧度 name",
  "desc": "弧度 desc2"
}

GET _analyze
{
  "analyzer": "keyword",
  "text": "弧度 name"
}

GET _analyze
{
  "analyzer": "standard",
  "text": "弧度 name"
}

Rest 風格說明

Rest 風格說明

Rest 風格說明

PUT testdb
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "desc": {
        "type": "keyword"
      }
    }
  }
}

PUT testdb/_doc/1
{
  "name": "弧度 name",
  "desc": "弧度 desc"
}

PUT testdb/_doc/2
{
  "name": "弧度 name",
  "desc": "弧度 desc2"
}

GET _analyze
{
  "analyzer": "keyword",
  "text": "弧度 name"
}

GET _analyze
{
  "analyzer": "standard",
  "text": "弧度 name"
}

GET testdb/_search
{
  "query": {
    "term": {
      "name": "弧"
    }
  }
}

GET testdb/_search
{
  "query": {
    "term": {
      "desc": "弧度 desc"
    }
  }
}

多個值匹配的精確查詢

PUT testdb/_doc/3
{
  "t1": "22",
  "t2": "2020-09-27"
}

PUT testdb/_doc/4
{
  "t1": "33",
  "t2": "2020-09-28"
}

GET testdb/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "t1": "22"
          }
        },
        {
          "term": {
            "t1": "33"
          }
        }
      ]
    }
  }
}

Rest 風格說明

高亮查詢

GET hudu/user/_search
{
  "query": {
    "match": {
      "name": "李四"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}

Rest 風格說明

GET hudu/user/_search
{
  "query": {
    "match": {
      "name": "李四"
    }
  },
  "highlight": {
    "pre_tags": "<p class='key' style='color:red'>", 
    "post_tags": "</p>", 
    "fields": {
      "name": {}
    }
  }
}

Rest 風格說明

這些其實MySQL也可以做,只是MySQL效率比較低

  • 匹配
  • 按照條件匹配
  • 精確匹配
  • 區間範圍匹配
  • 匹配欄位過濾
  • 多條件查詢
  • 高亮查詢
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章