ES快速入門


bg

一搪哪、概念

1.ES基礎(chǔ)概念

? ES是ElasticSearch的縮寫靡努。ES是基于Apache Lucene的開源搜索引擎,是一款實(shí)時分布式搜索和分析引擎晓折,提供RestfulAPI可以進(jìn)行可視化的交互惑朦。具有如下特點(diǎn):

? 1) 提供分布式的實(shí)時文件存儲,每個字段都被索引并可被搜索漓概;

? 2)實(shí)時分析的分布式搜索引擎漾月;

? 3)可以擴(kuò)展到上百萬臺服務(wù)器,能處理PB級結(jié)構(gòu)化或非結(jié)構(gòu)化的數(shù)據(jù)

2.NRT

? NRT是近實(shí)時Near Realtime的縮寫胃珍。ES是一款近實(shí)時的搜索平臺梁肿,即意味著有輕微的延遲,在從開始索引文檔到有結(jié)果的時間稍微延遲通常為1秒堂鲜。

3.ES和SQL

? ES也是一種數(shù)據(jù)庫栈雳,學(xué)習(xí)ES可以對比SQL來理解和學(xué)習(xí)。下面先列出二者的關(guān)系如表-1缔莲,方便讀者有個大概了解哥纫。第二節(jié)會詳細(xì)介紹關(guān)于ES的常用術(shù)語。

表-1.ES和SQL對照理解


二、存儲相關(guān)

1.物理存儲

1)Cluster

? 集群是一個或者一個以上的節(jié)點(diǎn)(服務(wù)器)的集合蛀骇。并在所有節(jié)點(diǎn)上提供聯(lián)合的索引和搜索功能厌秒。集群由唯一的名稱標(biāo)識,默認(rèn)情況下是“elasticsearch”擅憔。該名稱很重要鸵闪,因?yàn)槿绻?jié)點(diǎn)設(shè)置為通過其名稱加入集群,則節(jié)點(diǎn)只能是集群的一部分暑诸。

2)Node

? 節(jié)點(diǎn)是作為集群一部分的單一服務(wù)器蚌讼,存儲您的數(shù)據(jù),并參與集群的索引和搜索功能个榕。就像一個集群一樣篡石,一個節(jié)點(diǎn)由一個名稱來標(biāo)識,默認(rèn)情況下是一個隨機(jī)的通用唯一標(biāo)識符(UUID)西采,它在啟動時分配給該節(jié)點(diǎn)凰萨。所有的節(jié)點(diǎn)通過設(shè)置集群名cluster.name來確定屬于某個集群。

3)Shard

? 由于索引存在存儲可能超過單個節(jié)點(diǎn)的硬件限制的大量數(shù)據(jù)械馆。例如胖眷,占用1TB磁盤空間的10億個文檔的單個索引可能不適合單個節(jié)點(diǎn)的磁盤,或者可能太慢霹崎,無法單獨(dú)從單個節(jié)點(diǎn)提供搜索請求珊搀。因此分片就是為了解決這個問題。每個索引被分成若干個分片仿畸。分片被存儲在不同的節(jié)點(diǎn)中食棕。分片很重要,使用分片的作用:

a) 允許水平分割/縮放內(nèi)容错沽,提高擴(kuò)展能力;

b) 允許在分片(可能在多個節(jié)點(diǎn)上)分布和并行操作眶拉,從而提高性能/吞吐量千埃;

4)Replica

? 副本是分片的復(fù)制。副本的作用:

a) 如果分片/節(jié)點(diǎn)出現(xiàn)故障忆植,則可提供高可用性

b) 允許擴(kuò)展搜索量/吞吐量放可,因?yàn)榭梢詫λ懈北静⑿袌?zhí)行搜索

? 默認(rèn)情默認(rèn)情況下,ElasticSearch中的每個索引都分配了5個主分片和1個副本況下朝刊,ElasticSearch中的每個索引都分配了5個主分片和1個副本耀里。創(chuàng)建索引后,您可以隨時動態(tài)更改副本數(shù)拾氓,但不能更改主分片數(shù)冯挎。

2.邏輯存儲

1)Index

? 索引是具有某種相似特征的文檔的集合。例如咙鞍,您可以擁有客戶數(shù)據(jù)的索引房官,產(chǎn)品目錄的另一個索引趾徽,以及訂單數(shù)據(jù)的另一個索引。索引由名稱(必須全部為小寫)標(biāo)識翰守,該名稱用于在針對其中的文檔執(zhí)行索引孵奶,搜索,更新和刪除操作時引用索引蜡峰。

2)Type

? 類型是您的索引的邏輯類別/分區(qū)了袁,允許您將不同類型的文檔存儲在同一索引中,例如用戶的一種類型湿颅,博客文章的另一種類型早像。在索引中不再可能創(chuàng)建多個類型,并且在以后的版本中將刪除整個類型的概念肖爵。

3)Document

? 文檔是可以索引的基本信息單元卢鹦。例如,您可以為單個客戶提供文檔劝堪,單個產(chǎn)品的文檔冀自,單個訂單的另一個文檔。該文檔以JSON(JavaScript Object Notation)表示秒啦,它是一種無處不在的互聯(lián)網(wǎng)數(shù)據(jù)交換格式熬粗。

4)Field

? 多個字段組成一個文檔。一個索引的所有文檔類型中對于具有相同名稱的字段必須是同一種數(shù)據(jù)類型余境,與SQL SERVER不同驻呐,同一數(shù)據(jù)庫中不同表中相同名稱的列數(shù)據(jù)類型可以不一樣。

5)Mapping

? 映射就是字段即字段和字段類型的對應(yīng)關(guān)系芳来。映射機(jī)制用于進(jìn)行字段類型確認(rèn)含末,將每個字段匹配為一種確定的數(shù)據(jù)類型。例如:字段name即舌,類型是String佣盒;字段age,類型是Integer顽聂。除此之外字段的類型也可以是日期肥惭、布爾值、數(shù)組紊搪、浮點(diǎn)數(shù)蜜葱、對象等等。

三耀石、基礎(chǔ)操作

1.創(chuàng)建

增加一行數(shù)據(jù)牵囤,使用關(guān)鍵字Create。內(nèi)容按照json數(shù)據(jù),可以手動寫奔浅,也可以根據(jù)已知的json格式創(chuàng)建馆纳。

語法模板一:

curl -XPOST localhost:9200/索引名/類型名/'-d'

{"title":"xxxx","text":"xxxx","date":"2014/01/01"}

備注:-d參數(shù)用于將數(shù)據(jù)放在http請求的body中發(fā)送

語法模板二:

curl -XPOST localhost:9200/create_index_action/索引名/類型名/ --data-binary @a.json

備注:依據(jù)據(jù)a.json創(chuàng)建

2.刪除

刪除一行數(shù)據(jù),使用關(guān)鍵字Delete汹桦。

語法模板:

curl -XDELETE localhost:9200/索引名/類型名/ID

備注:ID號一般是自動生成的唯一標(biāo)志符鲁驶,也可以更具需要自定義。

3.修改

修改一行數(shù)據(jù)舞骆,使用關(guān)鍵字Update钥弯。

語法模板:

1)修改某一字段的值

curl -XPOST localhost:9200/索引名/類型名/ID號/_update?pretty

{

"doc":{"name":"wxxq"}

}

2)增加一個字段

curl -XPOST localhost:9200/索引名/類型名/ID號/_update?pretty

{

"doc":{"name":"wxxq","age":18}

}

3)使用腳本修改

curl -XPOST localhost:9200/索引名/類型名/ID號/_update?pretty

{

"script":"ctx._source.age+=5"

}

備注:ctx._source指的是即將更新的當(dāng)前源文檔

4.簡單查詢

查詢數(shù)據(jù),使用關(guān)鍵字Search督禽。

語法模板:

1)空查詢:

? curl -XGET localhost:9200/_search?pretty

? 備注:返回索引中所有的文檔

2)根據(jù)id號來查詢:

? curl -XGET localhost:9200/索引名/類型名/_search?q="_id":"AV4CnR6NuLtuw-m9JsB_"

3)模糊查詢:

? curl -XGET localhost:9200/_all/_search?q="add"

? 備注:查詢有add的文檔

5.批處理

? 批量處理數(shù)據(jù)脆霎,使用關(guān)鍵字bulk。

語法模板:

1)同時修改多個索引

? curl -XPOST localhost:9200/索引名/類型名/_bulk?pretty

? {"index":{"_id":"1"}}

? {"name": "John Doe" }

? {"index":{"_id":"2"}}

? {"name": "Jane Doe" }

2)對多個索引進(jìn)行不同的處理操作

? curl -XPOST localhost:9200/索引名/類型名/_bulk?pretty

? {"update":{"_id":"1"}}

? {"doc": { "name": "John Doe becomes JaneDoe" } }

? {"delete":{"_id":"2"}}

6.搜索結(jié)果釋義

圖-1是一張搜索結(jié)果的截圖狈惫,下面將針對搜索結(jié)果的結(jié)構(gòu)解釋來查看數(shù)據(jù)內(nèi)容睛蛛。


圖-1.搜索結(jié)果


搜索結(jié)果備注:

took:執(zhí)行ES的搜索需要的時間

timed_out:是否超時

_shards:搜索了多少個分片,成功數(shù)量胧谈,失敗數(shù)量

hits:搜索結(jié)果忆肾,通過鍵值對展示

hits.total:符合搜索條件的文件總數(shù)

hits.hits:實(shí)際搜索結(jié)果數(shù)組

_index:該條數(shù)據(jù)所在索引

_type:該條數(shù)據(jù)所在類型

_id:該數(shù)據(jù)的唯一標(biāo)識符

_source:該條數(shù)據(jù)的內(nèi)容,里面由多個fields組成

四菱肖、復(fù)雜查詢

1.多條件查詢

curl -XGET localhost:9200/school/student/_search{

"query":{

"bool":{

? ? ? ? ? ? ? ?"must":[{"match":{"gender":"male"}},

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?{"match":{"age":18}}],

? ? ? ? ? ? ? "should":["match":{"hobby":"music"}],

? ? ? ? ? ? ? ?"must_not":["match":{"address":"BeiJing"}]

}},

"from":5,

"size":10,

"sort":{"age":{"order":"desc"}}

}

2.過濾器

curl -XGET localhost:9200/school/student/_search{

"query": {

? ? ? ? ? ? ? ?"bool": {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"must": {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"match_all": {}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?},

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"filter": {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "range": {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "money": {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"gte": 20000,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"lte": 30000

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ? ? ? ? ? }

?},

"from":5,

"size":10,

"sort":{"age":{"order":"desc"}}

}

備注1:

gt ? ? ? ? ?大于

gte ? ? ? ?大于等于

lt ? ? ? ? ? ?小于

lte ? ? ? ? ?小于等于

備注2:

除了使用range過濾客冈,還可以使用term,terms,exists,missing等

1) term用于精確匹配某些值,如數(shù)字稳强,日期场仲,布爾值

? ?{"term":{"age":20}}

? ?{"term":{"date":"2017-08-21"}}

2) terms與term類似,但允許指定多個匹配條件,當(dāng)某個字段存在多個值時

? ? {"terms":{

? ? ? ? ? ? ? ? ? ? ? "tag":["search","full_text","nosql"]

? ? ? ? ? ? ? ? ? ?}

? ? ? }

3)exists包含某字段

{

? ? ? ? "exists":{

? ? ? ? ? ? ? ? ? ? ? ?"fields":"tittle"

? ? ? ? ? ? ? ? ? ? }

}

4)missing沒有某字段

{

? ? ? ? ?"missing":{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "fields":"tittle"

? ? ? ? ? ? ? ? ? ? ? ? }

}

3.聚合

聚合(aggregations)類似于SQL的Group By退疫。

curl -XGET localhost:9200/school/student/_search{

?"size":0,

"aggs":{

"group_by_age":{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"range":{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"field":"age",

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"ranges":[{"from":20,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "to":30},

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {"from":30,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"to":40},

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?{"from":40,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"to":50}]

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ?}

? ?}

}

聚合還支持嵌套查詢

curl -XGET localhost:9200/school/student/_search{

"size":0,

"aggs":{

"group_by_age":{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"range":{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"field":"age",

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "ranges":[{"from":20,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "to":30},

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {"from":30,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "to":40},

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {"from":40,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "to":50}]

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? }

},

"aggs":{

? ? ? ? ? ? ? "group_by_gender":{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"terms":{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "field":"gender"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "aggs":{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"avg":{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "field":"balance"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ?}?

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渠缕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蹄咖,更是在濱河造成了極大的恐慌褐健,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澜汤,死亡現(xiàn)場離奇詭異,居然都是意外死亡舵匾,警方通過查閱死者的電腦和手機(jī)俊抵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坐梯,“玉大人徽诲,你說我怎么就攤上這事。” “怎么了谎替?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵偷溺,是天一觀的道長。 經(jīng)常有香客問我钱贯,道長挫掏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任秩命,我火速辦了婚禮尉共,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弃锐。我一直安慰自己袄友,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布霹菊。 她就那樣靜靜地躺著剧蚣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旋廷。 梳的紋絲不亂的頭發(fā)上鸠按,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機(jī)與錄音柳洋,去河邊找鬼待诅。 笑死,一個胖子當(dāng)著我的面吹牛熊镣,可吹牛的內(nèi)容都是我干的卑雁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼绪囱,長吁一口氣:“原來是場噩夢啊……” “哼测蹲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鬼吵,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤扣甲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后齿椅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琉挖,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年涣脚,在試婚紗的時候發(fā)現(xiàn)自己被綠了叫确。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片影斑。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站弄喘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏甩牺。R本人自食惡果不足惜蘑志,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望柴灯。 院中可真熱鬧卖漫,春花似錦、人聲如沸赠群。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽查描。三九已至突委,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冬三,已是汗流浹背匀油。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留勾笆,地道東北人敌蚜。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像窝爪,于是被迫代替她去往敵國和親弛车。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容