推薦初學(xué)學(xué)習(xí)路程
阮一峰老師的基礎(chǔ)介紹
官方中文權(quán)威指南
elasticsearch是啥?
Elasticsearch 是一個分布式、可擴(kuò)展、實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎。賦予你的數(shù)據(jù)以搜索、分析和探索的能力。
elasticsearch術(shù)語
了解es術(shù)語是快速掌握es架構(gòu)設(shè)計(jì)的基礎(chǔ)
Node(節(jié)點(diǎn)) 與 Cluster(集群)
Elastic 本質(zhì)上是一個分布式數(shù)據(jù)庫,允許多臺服務(wù)器協(xié)同工作,每臺服務(wù)器可以運(yùn)行多個 Elastic 實(shí)例。
單個 Elastic 實(shí)例稱為一個節(jié)點(diǎn)(node)。一組節(jié)點(diǎn)構(gòu)成一個集群(cluster)。Index (索引)
索引就是像關(guān)系數(shù)據(jù)庫中的“數(shù)據(jù)庫”。通過映射可以定義成多種類型。索引是一個邏輯命名空間映射到一個或多個主要的分片,可以有零個或多個副本分片
下面的命令可以查看當(dāng)前節(jié)點(diǎn)的所有 Index:
$ curl -X GET 'http://localhost:9200/_cat/indices?v'Document(文檔)
Index 里面單條的記錄稱為 Document(文檔)。許多條 Document 構(gòu)成了一個 Index(索引)。同一個 Index 里面的 Document,不要求有相同的結(jié)構(gòu)(scheme),但是最好保持相同,這樣有利于提高搜索效率。
Document 使用 JSON 格式表示,例:
{
"user": "張三",
"title": "工程師",
"desc": "數(shù)據(jù)庫管理"
}
Field(字段)
文檔中包含的一組字段或鍵值對。字段的值可以是一個簡單的(標(biāo)量)值(如字符串,整數(shù),日期),或者一個嵌套的結(jié)構(gòu)就像一個數(shù)組或?qū)ο蟆R粋€字段就是類似關(guān)系數(shù)據(jù)庫表中的一列。Id(標(biāo)識)
每個文檔ID標(biāo)識了一個文檔。一個文檔的索引/類型/ ID必須是唯一的。如果沒有提供ID,將是自動生成。Source field(源字段)
默認(rèn)情況下,你的JSON文檔將被索引存儲在_source字段里面,所有的get(獲?。┖蛃earch(搜索)請求將返回的該字段。這將允許你直接從搜索結(jié)果中訪問到源數(shù)據(jù),而不需要再次發(fā)起請求檢索。
注:索引將返回完整的的JSON字符串給你,即使它包含無效的JSON。此字段里的內(nèi)容不表示任何該對象里面的數(shù)據(jù)如何被索引。Term(術(shù)語)
在elasticsearch里,術(shù)語(term)是一個被索引的精確值。術(shù)語 foo, Foo,FOO 是不想等的。術(shù)語(即精確值)可以使用“term”查詢接口來查詢。Text(文本)
文本(或全文)是普通非結(jié)構(gòu)化的文本,如本段。默認(rèn)情況下,文本將被分析成術(shù)語,術(shù)語才是實(shí)際存儲在索引中。文本字段在索引時(shí)需要進(jìn)行分析,以便全文搜索,全文查詢的關(guān)鍵字在搜索時(shí),必須分析產(chǎn)生(搜索)與索引時(shí)相同的術(shù)語。Type(類型)
Document 可以分組,如weather這個 Index 里面,可以按城市分組(北京和上海),也可以按氣候分組(晴天和雨天)。這種分組就叫做 Type,它是虛擬的邏輯分組,用來過濾 Document。不同的 Type 應(yīng)該有相似的結(jié)構(gòu)(schema),舉例來說,id字段不能在這個組是字符串,在另一個組是數(shù)值。這是與關(guān)系型數(shù)據(jù)庫的表的一個區(qū)別。性質(zhì)完全不同的數(shù)據(jù)(比如products和logs)應(yīng)該存成兩個 Index,而不是一個 Index 里面的兩個 Type(雖然可以做到)。
下面的命令可以列出每個 Index 所包含的 Type。
$ curl 'localhost:9200/_mapping?pretty=true'
根據(jù)規(guī)劃,Elastic 6.x 版只允許每個 Index 包含一個 Type,7.x 版將會徹底移除 Type。
Mapping(映射)
映射是像關(guān)系數(shù)據(jù)庫中的”模式定義“。每個索引都有一個映射,它定義了每個索引的類型,再加上一些索引范圍的設(shè)置。映射可以被明確地定義,或者在一個文檔被索引的時(shí)候自動生成。Analysis(分析)
分析的過程就是將全文(full text)轉(zhuǎn)換成 術(shù)語/分詞(terms)。 這取決于使用那個分析器Shard(分片)
一個分片是一個單一的Lucene的實(shí)例。這是一個低級別的通過ElasticSearch自動管理的“工作者”單元。索引是一個邏輯命名空間指向主分片和副本分片。索引的主分片和副本分片的數(shù)量需要明確的指定。然而你的代碼應(yīng)該只處理一個索引。Elasticsearch分配集群中所有節(jié)點(diǎn)的分片。在節(jié)點(diǎn)出現(xiàn)故障或增加新節(jié)點(diǎn)的時(shí)候,可以自動的將一個節(jié)點(diǎn)上的分片移動到另一個節(jié)點(diǎn)上。Primary shard(主分片)
每個文檔都存儲在一個主要分片上。當(dāng)你索引一個文檔時(shí),索引首先生成在主分片上,然后才到主分片的所有副本上。默認(rèn)情況下,索引有5個主分片??梢灾付ǜ嗷蚋俚闹鞣制瑏磉m應(yīng)索引可以處理的文檔數(shù)。一旦創(chuàng)建了索引,就不能改變索引中主分片的數(shù)量。-
Replica shard(副本分片)
每個主分片可以有零個或多個副本。副本是主分片的一個拷貝,有兩個作用:- 1、故障轉(zhuǎn)移:如果主分片有問題,副本分片可以提升為主分片;
- 2、提高性能:獲取和搜索請求可以處理主分片或副本分片。
默認(rèn)情況下,每個主分片有一個副本,不過索引的副本數(shù)量可以動態(tài)地改變。在同一個節(jié)點(diǎn)上,一個副本分片將永遠(yuǎn)不會和其主分片一起運(yùn)行。
Routing(路由)
當(dāng)你索引一個文檔,它是存儲在一個主分片里。這分片的選擇是通過哈希的路由值。默認(rèn)情況下,路由值來自文檔的ID;如果該文檔指定了父文檔,則使用父文檔的ID(以確保這個子文檔和父文件都存儲在相同的分片上)。這個路由值可以在索引的時(shí)候,通過指定數(shù)值或者配置字段映射來覆蓋。
常用命令
- 創(chuàng)建索引
$ curl -X PUT 'localhost:9200/weather'
服務(wù)器返回一個 JSON 對象,里面的acknowledged字段表示操作成功。
{
"acknowledged":true,
"shards_acknowledged":true
}
刪除索引
$ curl -X DELETE 'localhost:9200/weather'新增記錄
$ curl -X PUT 'localhost:9200/weather/clouds/1' -d '
{
"date": "2018-10-10",
"title": "多云",
"desc": "天氣轉(zhuǎn)冷,添加衣物"
}'
/weather/clouds/1 weather既是索引名 clouds為文檔名 1為設(shè)定Id為1
查找記錄
向/Index/Type/Id發(fā)出 GET 請求,就可以查看這條記錄。
$ curl 'localhost:9200/weather/clouds/1?pretty=true'刪除記錄
$ curl -X DELETE 'localhost:9200/weather/clouds/1'數(shù)據(jù)查詢
使用 GET 方法,直接請求/Index/Type/_search,就會返回所有記錄。