參考連結
Relational DB | Elasticsearch |
---|---|
資料庫(database) | 索引(indices) |
表(tables) | types |
行(rows) | documents |
字段(columns) | fields |
庫表行字段,index,type,id,fields, 索引類型文檔字段
建立一篇文檔
PUT t1/doc/1
{
"name": "小黑的小姨媽",
"age": 18
}
index/type/id id是單個文檔
查詢所有索引
GET _cat/indices?v
查詢指定的索引資訊
GET t1
查詢文檔資訊
GET t1/doc/1 #查詢指定文檔
GET t1/doc/_search #查詢所有文檔
删除指定索引
DELETE /t1
修改文檔
PUT zhifou/doc/1
{
"name":"顧老二",
"age":30,
"from": "gu",
"desc": "皮膚黑、武器長、性格直",
"tags": ["黑", "長", "直"]
}
我們要将黑修改成黃:
POST zhifou/doc/1/_update
{
"doc": {
"desc": "皮膚很黃,武器很長,性格很直",
"tags": ["很黃","很長", "很直"]
}
}
查詢字元串
方式一:
GET zhifou/doc/_search?q=from:gu
屬性是from,屬性值是gu的文檔
方式二:
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
}
}
match條件查詢,查詢含有(比對)指定字段值的文檔
我們檢視來自顧家的都有哪些人
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
}
}
match查詢全部文檔
查詢
zhifou
索引下的
doc
類型中的所有文檔,那就是查詢全部
GET zhifou/doc/_search
{
"query": {
"match_all": {}
}
}
match_phrase(短語查詢)
GET t1/doc/_search
{
"query": {
"match_phrase": {
"title": {
"query": "中國"
}
}
}
}
title字段中包含短語中國
GET t1/doc/_search
{
"query": {
"match_phrase": {
"title": {
"query": "中國世界",
"slop": 2
}
}
}
}
slop了。相當于正則中的中國.*?世界。這個間隔預設為0,指定短語間隔
match_phrase_prefix(最左字首查詢)
GET t3/doc/_search
{
"query": {
"match_phrase_prefix": {
"desc": "bea"
}
}
}
desc字段bea開頭字
GET t3/doc/_search
{
"query": {
"match_phrase_prefix": {
"desc": {
"query": "bea",
"max_expansions": 1
}
}
}
}
max_expansions來設定最大的字首擴充數量
multi_match(多字段查詢)
方法一:
GET t3/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "beautiful"
}
},
{
"match": {
"desc": "beautiful"
}
}
]
}
}
}
方法二:
GET t3/doc/_search
{
"query": {
"multi_match": {
"query": "beautiful",
"fields": ["title", "desc"]
}
}
}
multi_match甚至可以當做match_phrase和match_phrase_prefix使用,隻需要指定type類型即可:
GET t3/doc/_search
{
"query": {
"multi_match": {
"query": "gi",
"fields": ["title"],
"type": "phrase_prefix"
}
}
}
GET t3/doc/_search
{
"query": {
"multi_match": {
"query": "girl",
"fields": ["title"],
"type": "phrase"
}
}
}
term查詢#單個比對項
POST _analyze
{
"analyzer": "standard",
"text": "Beautiful girl!"
}
# 結果
["beautiful", "girl"]
GET w10/doc/_search
{
"query": {
"term": {
"t1": "beautiful"
}
}
}
terms查詢#多個比對項
GET w10/doc/_search
{
"query": {
"terms": {
"t1": ["beautiful", "sexy"]
}
}
}
排序查詢:sort#按某個字段降序查詢
查詢顧府都有哪些人,并根據age字段按照降序
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
按某個字段升序查詢
GET zhifou/doc/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "asc"
}
}
]
}
分頁查詢:from/size#
GET zhifou/doc/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 2,
"size": 1
}
from:從哪開始查
size:傳回幾條結果
bool查詢
must#(and)并且,滿足多個條件
單個條件查詢:布爾查詢所有from屬性為gu的資料:
GET zhifou/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"from": "gu"
}
}
]
}
}
}
多個條件查詢:想要查詢from為gu,并且age為30的資料
GET zhifou/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"from": "gu"
}
},
{
"match": {
"age": 30
}
}
]
}
}
}
bool查詢should(or),滿足一個就行
查詢隻要是from為gu或者tags為閉月的資料
GET zhifou/doc/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"from": "gu"
}
},
{
"match": {
"tags": "閉月"
}
}
]
}
}
}
bool查詢must_not(not) 既不,也不是
查詢from既不是gu并且tags也不是可愛,還有age不是18的資料
GET zhifou/doc/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"from": "gu"
}
},
{
"match": {
"tags": "可愛"
}
},
{
"match": {
"age": 18
}
}
]
}
}
}
bool查詢filter 滿足某個條件,某個字段還可以比較大小範圍
查詢from為gu,age大于25的資料 。比較符号有gt gte lt lte
GET zhifou/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"from": "gu"
}
}
],
"filter": {
"range": {
"age": {
"gt": 25
}
}
}
}
}
}
查詢from是gu,age在25~30之間
GET zhifou/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"from": "gu"
}
}
],
"filter": {
"range": {
"age": {
"gte": 25,
"lte": 30
}
}
}
}
}
}
must改成should,滿足下面的filter但不滿足上面的match也會顯示出來
GET zhifou/doc/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"from": "sheng"
}
}
],
"filter": {
"range": {
"age": {
"lte": 25
}
}
}
}
}
}
bool must filter過濾,過濾一個字段是a,并且另一個字段是b或者c
GET xxx-fsmxx_pm_rawxx_mod_unix_linux_211128/_doc/_search
{
"query": {
"bool": {
"must": [{
"range": {
"DCTIME": {
"from": 1,
"to": 1738028800000,
"include_lower": false,
"include_upper": false,
"boost": 1.0
}
}
}],
"filter": [{
"terms": {
"KPI_NO": ["20200413185034"],
"boost": 1.0
}
}, {
"terms": {
"KBP": ["6518921118106698111","6038954760944889699"]
}
}],
"adjust_pure_negative": true,
"boost": 1.0
}
},
"sort": [{
"DCTIME": {
"order": "asc",
"unmapped_type": "long"
}
}]
}
-
:與關系,相當于關系型資料庫中的must
。and
-
:或關系,相當于關系型資料庫中的should
or
-
:非關系,相當于關系型資料庫中的must_not
not
-
:過濾條件。filter
-
:條件篩選範圍。range
-
:大于,相當于關系型資料庫中的gt
>
-
:大于等于,相當于關系型資料庫中的gte
>=
-
:小于,相當于關系型資料庫中的lt
<
-
:小于等于,相當于關系型資料庫中的lte
<=
結果過濾:_source
在所有的結果中,我隻需要檢視name和age兩個屬性,其他的不要
GET zhifou/doc/_search
{
"query": {
"match": {
"name": "顧老二"
}
},
"_source": ["name", "age"]
}
avg
查詢from是gu的人的平均年齡
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
},
"aggs": {
"my_avg": {
"avg": {
"field": "age"
}
}
},
"_source": ["name", "age"]
}
首先比對查詢from是gu的資料。在此基礎上做查詢平均值的操作,這裡就用到了聚合函數,其文法被封裝在aggs中,而my_avg則是為查詢結果起個别名,封裝了計算出的平均值。那麼,要以什麼屬性作為條件呢?是age年齡,查年齡的什麼呢?是avg,查平均年齡。
隻想看平均值
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
},
"aggs": {
"my_avg": {
"avg": {
"field": "age"
}
}
},
"size": 0,
"_source": ["name", "age"]
}
max
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
},
"aggs": {
"my_max": {
"max": {
"field": "age"
}
}
},
"size": 0
}
min
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
},
"aggs": {
"my_min": {
"min": {
"field": "age"
}
}
},
"size": 0
}
sum
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
},
"aggs": {
"my_sum": {
"sum": {
"field": "age"
}
}
},
"size": 0
}
分組查詢和分組聚合
查詢所有人的年齡段,并且按照15~20,20~25,25~30分組,
GET zhifou/doc/_search
{
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"age_group": {
"range": {
"field": "age",
"ranges": [
{
"from": 15,
"to": 20
},
{
"from": 20,
"to": 25
},
{
"from": 25,
"to": 30
}
]
}
}
}
}
查詢所有人的年齡段,并且按照15~20,20~25,25~30分組,并且算出每組的平均年齡。每個小組内的資料做平均年齡處理。
GET zhifou/doc/_search
{
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"age_group": {
"range": {
"field": "age",
"ranges": [
{
"from": 15,
"to": 20
},
{
"from": 20,
"to": 25
},
{
"from": 25,
"to": 30
}
]
},
"aggs": {
"my_avg": {
"avg": {
"field": "age"
}
}
}
}
}
}
curl方法檢視es叢集資訊:
現場磁盤空間使用情況查詢
curl -XGET -u 使用者:密碼 "http://ip:端口/_cat/nodes?v&h=http,version,jdk,disk.total,disk.used,disk.avail,disk.used_percent,heap.current,heap.percent,heap.max,ram.current,ram.percent,ram.max,master"
好像是檢視所有索引分片的吧,反正是一大片輸出:
curl -XGET -u 使用者:密碼 "http://ip:端口/_cat/shards?v"
檢視叢集狀态:
curl -XGET -u 使用者:密碼 -H "Content-Type: application/json" http://ip:端口/_cat/health?v