如何使用Elasticsearch中提供的RESTFul風格api?相信你在這裏能夠找到答案

前言:

本篇會以小案例需求的方式帶你學習Elasticsearch中基於RESTFulApi操做。手敲幾遍,想不會也難。加油~mysql

對了,這裏使用的是Kibana和head進行的管理,若是沒有接觸,推薦看下面的博客,寫的挺清楚。sql

基本概念

Elasticsearch也是基於Lucene的全文檢索庫,本質也是存儲數據,不少概念與MySQL相似的。數據庫

概念 說明
索引(indices) Databases數據庫
類型(type) Table數據庫
文檔(Document) Row行
字段(Field) Columns
  • 索引庫(indices):indices是index的複數,表明許多的索引
  • 類型(type):類型是模擬mysql中的table概念,一個索引庫下能夠有不一樣類型的索引,好比商品索引,訂單索引,其數據格式不一樣。不過這會致使索引庫混亂,所以將來版本中會移除這個概念。
  • 文檔(document):存入索引庫原始的數據。好比每一條商品信息,就是一個文檔。
  • 字段(field):文檔中的屬性。
  • 映射配置(mappings):字段的數據類型、屬性、是否索引、是否存儲等特性。

1. 索引管理

1.1 建立索引

Elastic中索引至關於sql數據庫中的數據庫
實例:
PUT 索引名
{}

1.2 查詢索引

GET 索引名

1.3 刪除索引

DELETE 索引名

2. 映射操做

刪除完成後記得再建立回來,由於還要使用編程

2.1 建立映射

類型至關於sql數據庫中的表api

PUT 索引名/_mapping/類型
{
  "properties": {
    "字段":{
      "參數名": "參數值"
    }
  }
}

解釋:
參數名: type,表示的是概參數的類型
參數值:
  核心類型:
    字符串: text(可分詞)、keyword(不可分詞)
    整數:integer,long,short,byte
    浮點:double,float,half_float,scaled_float
    日期:date
    邏輯:boolean
  複合類型:
    數組:array
    對象:object
    嵌套:nested
  地理類型:
    地理座標:geo_point
    地理地圖:geo_shape
  特殊類型:
    IP:ip
    範圍:completion
    令牌計數:token_count
    附件:attachment
    抽取:percolator

關於參數類型的解釋,這個博客感受寫的不錯,分享給大家:https://www.jianshu.com/p/01f489c46c38
  • 實例:
#建立映射
PUT refapi/_mapping/book
{
  "properties": {
    "title":{
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "price":{
      "type": ""
    },
    "images":{
      "type": "keyword",
      "index": true
    }
  }
}

2.2 查看映射

  • 語法: GET 索引號/_mapping
  • 實例: GET refapi/_mapping

3. 數據操做

3.1 添加數據,無id

  • 語法:
POST 索引名/類型名
{
  "屬性":"值",
  "屬性2":"值2"
}
  • 實例:
#添加數據,無id
POST refapi/book
{  
  "title":"女神養成計劃II",
  "price":"128.5",
  "images":"1.png"
}
POST refapi/book
{  
  "title":"Java核心技術",
  "price":"128.5",
  "images":"1.png"
}
POST refapi/book
{  
  "title":"Java編程思想",
  "price":"128.5",
  "images":"1.png"
}
POST refapi/book
{  
  "title":"PHP編程思想",
  "price":"128.5",
  "images":"1.png"
}

3.1 添加或更新數據,有id

  • 語法: 若是id存在將更新, 若是不存在, 將添加
PUT 索引名/類型/id
{
  "屬性":"值",
  "屬性2:"值2
}
  • 實例:
#添加或更新數據:有id
PUT refapi/book/b001
{
  "title":"女神養成計劃III",
  "price":"138.5",
  "images":"3.png"
}
PUT refapi/book/b002
{
  "title":"壞蛋是怎麼煉成的",
  "price":"66.66",
  "images":"4.png"
}

3.1 刪除數據

  • 語法:DELETE 索引名/類型/id
  • 實例:DELETE refapi/book/b002

4. 查詢操做

4.1 經過id查詢

  • 語法1:經過id查詢全部字段
GET 索引/類型/id

相似於sql中的(select * from book where id = ?)
  • 實例1:
GET refapi/book/b001

  • 語法2:經過id查詢部分字段
GET 索引/類型/id?_source=字段,字段2

相似於sql中的(select title,price from book where id = ?)
  • 實例2:
GET refapi/book/b001?_source=title,price

4.2 查詢全部

  • 語法1: 查詢全部索引庫
#查詢全部索引庫
GET _search
{
  "query": {
    "match_all": {}
  }
}

  • 語法2: 查詢指定索引庫
#查詢指定索引庫
GET 索引庫/_search
{
  "query": {
    "match_all": {}
  }
}
  • 實例2:
#查詢指定索引庫
GET refapi/_search
{
  "query": {
    "match_all": {}
  }
}

  • 語法3:
#查詢指定索引庫 中部分列數據
GET 索引庫/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["字段1","字段2",....]
}
  • 實例3:
#查詢指定索引庫 中部分列數據
GET refapi/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["title","price"]
}

4.3 關鍵字查詢

  • 使用match處理條件
  • 語法:
GET 索引庫/_search
{
  "query": {
    "match": {
      "字段": "值"
    }
  }
}
  • 需求: 查詢title爲 「Java編程思想」
  • 實例:
GET refapi/_search
{
  "query": {
    "match": {
      "title": "Java編程思想"
    }
  }
}

4.4 複合查詢-must

至關因而and(交集)數組

  • 語法:
    • 使用bool進行多條件拼湊
    • 採用 must、must_not進行數據過濾
      • must:須要留下來的數據
      • must_not:不須要留下的數據
#採用多條件進行查詢,查詢title爲 「Java編程思想」
GET 索引庫/_search
{
  "query": {
    "bool": {
      "must": [
        {
          關鍵字查詢
        }
      ]
    }
  }
}
  • 實例1: 採用多條件進行查詢, 查詢title爲"Java編程思想"的
#採用多條件進行查詢,查詢title爲 「Java編程思想」
GET refapi/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "Java編程思想"
          }
        }
      ]
    }
  }
}

  • 實例2: 採用多條件進行查詢,查詢title爲"Java編程思想"的,不含"PHP"的
#採用多條件進行查詢,查詢title爲"Java編程思想"的,不含"PHP"的
GET refapi/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "Java編程思想"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "title": "PHP"
          }
        }
      ]
    }
  }
}

4.5 複合查詢-should

至關因而or(並集)app

  • 語法:
#複合查詢-should
# 查詢"PHP編程思想" ,以及"女神養成記"相關數據
GET 索引庫/_search
{
  "query": {
    "bool": {
      "should": [
        {
          關鍵字查詢
        },
        {
          關鍵字查詢
        },
        ......
      ]
    }
  }
}
  • 需求: 查詢「PHP編程思想」 ,以及 女神養成記 相關數據
  • 實例:
#複合查詢-should
# 查詢"PHP編程思想" ,以及"女神養成記"相關數據
GET refapi/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": "PHP編程思想"
          }
        },
        {
          "match": {
            "title": "女神養成記"
          }
        }
      ]
    }
  }
}

4.6 精準查詢-term

  • 語法:
#查詢價格爲138.5 的信息
GET 索引庫/_search
{
  "query": {
    "term": {
      "字段": {
        "value": "值"
      }
    }
  }
}
  • 需求: 查詢價格爲138.5 的信息
  • 實例:
#查詢價格爲138.5 的信息
GET refapi/_search
{
  "query": {
    "term": {
      "price": {
        "value": "138.5"
      }
    }
  }
}

4.7 範圍查詢-range

  • 語法:
#範圍查詢-range
GET 索引庫/_search
{
  "query": {
    "range": {
      "字段": {
        "gte": "大於等於",
        "lte": "小於等於",
        "gt": "大於",
        "lt": "小於"
      }
    }
  }
}
  • 需求: 查詢價格在130 - 140 之間的數據
  • 實例:
#範圍查詢-range
#查詢價格在10 - 100 之間的數據
GET refapi/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 130,
        "lte": 140
      }
    }
  }
}

4.8 排序-sort

  • 語法:
GET 索引庫/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "字段": {
        "order": "排序方式(desc/asc)"
      }
    }
  ]
}
  • 需求: 按照價格排序
  • 實例:
#按照價格排序
GET refapi/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

4.9 分頁-from+size

  • 語法:
GET 索引庫/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 2
}
  • 實例:
#分頁-from+size
GET refapi/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 2
}

總結

咱們這篇共學了些什麼呢?來一塊兒捋一捋吧!

  • 1.索引的操做
建立:PUT 索引庫
查詢:GET 索引庫
刪除:DELETE 索引庫
  • 2.映射操做
建立映射:PUT 索引庫/_mapping/類型
查看映射:GET 索引庫/類型
  • 3.數據操做
添加: 無id,  有id只須要在類型後面跟/id便可
POST 索引庫/類型
{
  "屬性":"值"
}
刪除: 無id,  有id只須要在類型後面跟/id便可
DELETE 索引庫/類型
  • 4.查詢操做
- 經過id查詢:
GET 索引庫/類型/id
GET 索引庫/類型/id?_source=字段1,字段2
- 查詢全部:
GET 索引庫/_search
{
  "query":{
    "match_all":{}
  }
}
- 關鍵字查詢: match
GET 索引庫/_search
{
  "query":{
    "match":{
      "字段":"值"
    }
  }
}
- 複合查詢: must(交集and)、should(並集or)
  使用bool進行多條件拼湊
    採用 must、must_not進行數據過濾
      must:須要留下來的數據
      must_not:不須要留下的數據
- 精準查詢: term
GET czxy/_search
{
  "query": {
    "term": {
      "字段": {
        "value": "值"
      }
    }
  }
}
- 範圍查詢: range
GET 索引庫/_search
{
  "query": {
    "range": {
      "字段": {
        gt : "大於",
        lt : "小於",
        gte : "大於或等於",
        lte : "小於或等於"
      }
    }
  }
}
- 排序: sort
GET 索引庫/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "字段": {
        "order": "排序方式(desc:降序/asc:升序)"
      }
    }
  ]
}
- 分頁: from+size
from: 從第幾個索引開始(從0開始)
size:從from索引向後數幾(size)個進行查詢

GET refapi/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 2
}
  • 今天的學習就到這裏了,不知道你有沒有收穫到一些知識呢? (* ̄︶ ̄)
相關文章
相關標籤/搜索