首頁>技術>

第一次接觸es是19年做一個知識庫專案,業務需要模糊匹配和搜尋推薦。Mysql的查詢不能滿足像搜尋北京站返回北京火車站的場景,公司引入了es-分散式索引。

一.分散式索引引數介紹

1.number_of_shards:分片數量,不可更改。主要響應寫操作,如果調整分片數那就要重建索引。

2.number_of_replicas:副本數,可以修改,用於備份分片的,主要響應讀操作,副本越多讀取就越快。

3.es基礎型別

text:字串型別,可以被分詞keyword:不能被分詞,可以精確匹配的字串,keyword還支援字串陣列date:日期型別,通常配合format使用{"type":"date","format":"yyyy-MM-dd HH:mm:ss"}longintegershortfloatdoublearray:陣列型別object:一般是json結構ip:ip地址geo_point:地理位置等

大家使用時可以根據檢視官網型別

二.es基礎語法

es支援JSON格式的查詢叫做dsl-domain specific language,剛開始比較難理解,下面通過幾個簡單的例子開始

1.建立索引 學員表索引 es6.x版本預設5個分片一個副本,可根據資料量自行設定;

mappings:索引欄位設定,和mysql表字段一致

PUT /student{  "settings": {    "number_of_shards": 5,    "number_of_replicas": 1  },  "mappings": {    "_doc": {      "properties": {        "name": {          "type": "keyword"        },        "code": {          "type": "keyword"        },        "age": {          "type": "integer"        }      }    }  }}

2.修改副本數 副本數可以修改,分片數不能修改

PUT /student/_settings{  "number_of_replicas": 3}

3.檢視索引settings 和 mappings 屬性

GET student/_settings
GET student/_mapping

4.insert資料,指定id建立 PUT請求 /index/index_type/文件id,不指定id,es會預設生成20位字串id

PUT /student/_doc/1 {  "name": "小紅",  "age": 10,  "code":"1"}
PUT /student/_doc/2{  "name": "小剛",  "age": 11,  "code":"2"}
PUT /student/_doc/3{  "name": "小李",  "age": 10,  "code":"3"}
PUT /student/_doc/4{  "name": "小強",  "age": 10,  "code":"4"}

5.update資料

5.1指定id部分欄位修改 將小紅改為小紅1

POST /student/_doc/1/_update{  "doc":{    "name":"小紅1"  }}

5.2.指定id全量修改索引 文件1的資料全量被覆蓋

PUT /student/_doc/1{  "name": "小紅帽"}

5.3根據查詢條件修改 語法比較複雜,根據條件修補資料時需要

POST student/_update_by_query{  "query": {    "bool": {      "must": [        {          "term": {            "code": {              "value": "2"            }          }        }      ]    }  },  "script": {    "lang": "painless",    "inline": "ctx._source.name= '小剛1'"  }}

6.query資料

6.1指定id查詢資料 GET請求 /index/index_type/文件id

GET student/_doc/1

6.2查詢所有

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

6.3分頁查詢 使用_search

GET /student/_search{  "from": 0,  "size": 20}

6.4排序 按照年齡排序 asc和desc兩種排序規則

GET /student/_search{  "sort": [    {      "age": {        "order": "desc"      }    }  ]}

6.5聚合按照年齡分組 aggs表示聚合,size=0必要設定,否則會返回資料,group_by_age是自定義分組名,terms表示分組,field對應分組欄位

GET /student/_search{  "size": 0,  "aggs": {    "group_by_age": {      "terms": {        "field": "age"      }    }  }}

6.6按照code查詢,單值用term,多值用terms

GET student/_search{  "query": {    "bool": {      "must": [        {          "term": {            "code": {              "value": "2"            }          }        },        {          "terms": {            "code": [              "1",              "2"            ]          }        }      ]    }  }}

7.delete資料

DELETE /student/_doc/1
POST /student/_delete_by_query{  "query": {    "bool": {      "must": [        {          "term": {            "age": {              "value": 10            }          }        }      ]    }  }}

最後是我在使用es時經常查閱的的參考資料:分享給大家

中文版api,雖然是es2.x版本的,仍具參考價值

https://www.elastic.co/guide/cn/elasticsearch/guide/cn/index.html

英文版api,大家可以根據自己的版本選擇

https://www.elastic.co/guide/en/elasticsearch/reference/6.6/query-dsl.html

8
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 不知道學哪種語言程式設計?不要慌看這裡