Elasticsearch簡介和restAPI

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

對比關係:

索引(indices)--------------------------------Databases 數據庫

​    類型(type)-----------------------------Table 數據表

​         文檔(Document)----------------Row 行

​           字段(Field)-------------------Columns 列 

 

Elasticsearch具備以下特點:

- 分佈式,無需人工搭建集羣(solr就需要人爲配置,使用Zookeeper作爲註冊中心)
- Restful風格,一切API都遵循Rest原則,容易上手
- 近實時搜索,數據更新在Elasticsearch中幾乎是完全同步的。

另外,在SolrCloud中,有一些集羣相關的概念,在Elasticsearch也有類似的:
- 索引集(Indices,index的複數):邏輯上的完整索引
- 分片(shard):數據拆分後的各個部分
- 副本(replica):每個分片的複製
要注意的是:Elasticsearch本身就是分佈式的,因此即便你只有一個節點,Elasticsearch默認也會對你的數據進行分片和副本操作,當你向集羣添加新數據時,數據也會在新加入的節點中進行平衡。

 

創建索引:

- 請求方式:PUT

- 請求路徑:/索引庫名

- 請求參數:json格式:

  ```json
  {
      "settings": {
          "number_of_shards": 3,
          "number_of_replicas": 2
        }
  }
  ```

  - settings:索引庫的設置
    - number_of_shards:分片數量
    - number_of_replicas:副本數量

刪除索引:

DELETE  /heima

查看索引:

GET  /heima

接着創建映射

PUT /索引庫名/_mapping/類型名稱
{
  "properties": {
    "字段名": {
      "type": "類型",
      "index": true,
      "store": true,
      "analyzer": "分詞器"
    }
  }
}

PUT /heima/_mapping/goods
{
  "properties": {
    "title":{
      "type" : "text",
      "analyzer" : "ik_max_word"
    },
    "image":{
      "type" : "keyword",
      "index" : false
        
    },
    "price":{
      "type" : "float"
    }
  }
}

通過POST請求,可以向一個已經存在的索引庫中添加數據。 

簡單新增

POST /heima/goods/
{
    "title":"小米手機",
    "images":"http://image.leyou.com/12479122.jpg",
    "price":2699.00

查詢所有

GET heima/_search
{
  "query": {"match_all":{}}
}

根據id查詢單個

GET heima/goods/1

不加映射也能智能推斷保存數據

但是關於String

實驗:post 大米手機 超大米手機 小米手機 紅米手機

查詢到四個,因爲映射了有分詞器並且默認是or

改成and後查詢到兩個

term查詢精確查詢,這裏的大米手機相當於一個詞條,只匹配不分詞條的字段(除text外的字段),所有查詢到0個

查詢到4個

因爲手機作爲一個詞條 能匹配到已經分好詞後的大米手機,小米手機等

結果過濾

對搜索完的結果返回的數據進行過濾,includes/excludes選一

`fuzzy` 查詢是 `term` 查詢的模糊等價。有一定的容錯,能查出apple手機

range對數值字段進行範圍查詢

bool /must 多個條件同時滿足

bool /should 多個條件滿足一個即可

bool /must_not 多個條件同時不滿足

當多個條件時價格應是一個過濾條件,不應該影響查詢後的得分

所以上面寫的不合適

bool /must,filter各一個條件這樣不影響得分不影響高亮

查詢排序分頁

聚合

桶:

桶的作用,是按照某種方式對數據進行分組,每一組數據在ES中稱爲一個`桶`

Elasticsearch中提供的劃分桶的方式有很多:

- Date Histogram Aggregation:根據日期階梯分組,例如給定階梯爲周,會自動每週分爲一組
- Histogram Aggregation:根據數值階梯分組,與日期類似
- Terms Aggregation:根據詞條內容分組,詞條內容完全匹配的爲一組
- Range Aggregation:數值和日期的範圍分組,指定開始和結束,然後按段分組

-Avg Aggregation:數值的平均值聚合

度量(metrics)

分組完成以後,我們一般會對組中的數據進行聚合運算,例如求平均值、最大、最小、求和等,這些在ES中稱爲`度量`

**注意**:在ES中,需要進行聚合、排序、過濾的字段其處理方式比較特殊,因此不能被分詞。

- Terms Aggregation:按照生產商分組

在按照生產商分組的前提下計算每組的平均值 

查詢聚合一塊使用,聚合需要的數據是查詢得到的數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章