一、前言
執行命令行操作es的方式有幾種,比如使用postman,或者我們前面安裝的kibana客戶端,或者JavaApi等等,這篇文章重點介紹用kibana來操作我們的索引庫。
DSL語句:領域專用語言,由葉子查詢子句和復合查詢子句兩種子句組成。
Elasticsearch提供了基於JSON的DSL來定義查詢。
二、索引部分
索引創建
#1、創建索引庫,同時設置分詞器【有夢想的肥宅】 PUT /zh_user { "settings": { "index": { "analysis.analyzer.default.type": "ik_max_word" } } }
PS:PUT請求具有冪等性,如果重復執行同樣的語句創建索引庫會報錯
索引查詢
查看所有索引
#2、查詢所有索引【有夢想的肥宅】 GET /_cat/indices?v
查看單個索引
#3、查詢單個索引【有夢想的肥宅】 GET /zh_user
索引刪除
#4、刪除索引庫【有夢想的肥宅】 DELETE /zh_user
三、文檔部分
創建文檔
#5、創建文檔【格式:POST /索引名稱/類型(7.6.1版本默認是_doc)/id】 POST /zh_user/_doc/1/ { "name": "有夢想的肥宅", "sex": "男", "age": 27, "address": "廣西南寧", "remark": "有趣又上進的靈魂~" }
PS:創建文檔要用POST,如果沒有指定id的話,es會自動生成,指定了就用我們指定的id
查詢文檔
主鍵查詢
#6、根據主鍵查詢文檔(數據)【有夢想的肥宅】 GET /zh_user/_doc/1
全查詢
#7、全量查詢索引下文檔(數據)【有夢想的肥宅】 GET /zh_user/_search
修改文檔
全量修改
#8、全量修改文檔【格式:PUT /索引名稱/類型(7.6.1版本默認是_doc)/id】 PUT /zh_user/_doc/1/ { "name": "有夢想的肥宅【更新】", "sex": "男", "age": 27, "address": "廣西南寧", "remark": "有趣又上進的靈魂~" }
局部修改
#9、局部修改文檔【格式:PUT /索引名稱/類型(7.6.1版本默認是_doc)/id】 POST /zh_user/_update/1/ { "doc":{ "name": "有夢想的肥宅【更新】", "sex": "男【更新】", "address": "廣西南寧【更新】" } }
刪除
#10、刪除索引庫內的文檔(數據)【有夢想的肥宅】 DELETE /zh_user/_doc/1
四、查詢操作部分
條件查詢
#11、條件查詢【有夢想的肥宅】 GET /zh_user/_search { "query":{ "match":{ "sex":"男" } } }
分頁查詢
#12、分頁查詢【有夢想的肥宅】 GET /zh_user/_search { "query":{ "match":{ "sex":"男" } }, "from":0, "size":2 }
排序查詢
#13、排序查詢【有夢想的肥宅】 GET /zh_user/_search { "query":{ "match_all":{} #表示查詢全部數據 }, "sort":{ "age":{ "order":"desc" } } }
多條件查詢
#14、多條件查詢【有夢想的肥宅】 GET /zh_user/_search { "query":{ "bool":{ #表示需要進行條件過濾 "must":[{ #表示必須滿足下面的條件,並且參與計算分值,常用的子句還有should,表示“或”的意思 "match":{ "address":"廣西南寧" } },{ "match":{ "sex":"男" } }] } } }
范圍查詢
#15、范圍查詢【有夢想的肥宅】
GET /zh_user/_search { "query": { "bool": { #表示需要進行條件過濾 "filter": [{ #返回的文檔必須滿足filter子句的條件。但是跟Must不一樣的是,不會計算分值,並且可以使用緩存。【不算分的場景使用這個效率會提升】 "range": { "age": { "gt": 1 #表示查詢年齡大於1歲的小伙伴~ } } }] } } }
查詢分詞結果
#16、查詢分詞結果【有夢想的肥宅】 GET /zh_user/_doc/1/_termvectors?fields=address PS:這條語句的意思是,查詢索引庫zh_user下id為1的,字段為address的數據分詞的結果
也可以直接對一段文字進行分詞結果查詢:
POST _analyze { "text": ["廣西南寧青秀區"], "analyzer": "ik_max_word" #分詞器:standard【中文單字分詞】、ik_smart【最粗粒度拆分】、ik_max_word【最細粒度的拆分】 }
完全匹配
為了更好理解完全匹配的概念,我們先看一個例子:
PS:match:分詞后搜索。比如分詞后有N個分詞,只要匹配上其中一個就可以返回數據了。
GET /zh_user/_search { "query":{ "match":{ "name" : "夢想哈" } } }
#17、完全匹配查詢【有夢想的肥宅】
PS:match_phrase:分詞后搜索。與match不同的是,match_phase分出來的詞必須全部在搜索結果中,且位置順序是一樣的。
PS:這里說的完全匹配不是說必須輸入“有夢想的肥宅【更新】”才能精確匹配出來,而是分詞后順序一致就可以查詢出來 GET /zh_user/_search { "query":{ "match_phrase":{ "name" : "夢想哈" } } }
高亮查詢
#18、高亮查詢【有夢想的肥宅】 GET /zh_user/_search { "query": { "match_phrase": { "name": "有夢想" } }, "highlight": { "fields": { "name": {} #表示對當前字段進行高亮處理 } } }
聚合/分組查詢
#19、聚合查詢【有夢想的肥宅】 GET /zh_user/_search { "aggs":{ #表示聚合操作 "age_group":{ #分組名稱,可以隨便起 "terms":{ #表示分組操作,也可以使用avg來求平均值 "field":"age" #表示對哪一個字段進行分組 } } },
"size":0 #表示不查詢原始數據,只查詢分組結果 } PS:ES進行聚合查詢時,對應字段的類型只能是整形等,如果是“text”等類型是無法進行聚合分組查詢的。
五、映射關系部分
映射關系可以理解成數據庫中的表結構,那么我們來看一下怎么玩這個內容:
#20、創建索引庫,並設置映射【有夢想的肥宅】 PUT /zh_user_new #創建索引庫 PUT /zh_user_new/_mapping { "properties": { "name":{ "type": "keyword", #關鍵字類型,不做分詞操作 "index": true #表示此字段可以被用來查詢 }, "sex":{ "type": "text", #text類型,可以分詞 "index": true }, "age":{ "type": "long", #long類型,表示數值 "index": true }, "address":{ "type": "text", "index": true }, "reamrk":{ "type": "text", "index": false #表示此字段不可以被用來查詢 } } }