ElasticSearch—基本概念
原文作者:阮一峰
原文地址:全文搜索引擎 Elasticsearch 入門教程
全文搜索屬于最常見的需求,開源的?ElasticSearch?(以下簡(jiǎn)稱 Elastic)是目前全文搜索引擎的首選。
它可以快速地儲(chǔ)存、搜索和分析海量數(shù)據(jù)。維基百科、Stack Overflow、Github 都采用它。
Elastic 的底層是開源庫(kù)?Lucene。但是,你沒法直接用 Lucene,必須自己寫代碼去調(diào)用它的接口。Elastic 是 Lucene 的封裝,提供了 REST API 的操作接口,開箱即用。
1. 近實(shí)時(shí)查詢(Near RealTime)
Elasticsearch 是一個(gè)能提供近實(shí)時(shí)查詢的搜索服務(wù)引擎,這意味著從索引文檔到真正可搜索之間會(huì)有一個(gè)輕微的延遲(大概在一秒內(nèi))。
2. Node 與 Cluster
Elastic 本質(zhì)上是一個(gè)分布式數(shù)據(jù)庫(kù),允許多臺(tái)服務(wù)器協(xié)同工作,每臺(tái)服務(wù)器可以運(yùn)行多個(gè) Elastic 實(shí)例。單個(gè) Elastic 實(shí)例稱為一個(gè)節(jié)點(diǎn)(node)。一組節(jié)點(diǎn)構(gòu)成一個(gè)集群(cluster)。
3.?Index
Elastic 會(huì)索引所有字段,經(jīng)過(guò)處理后寫入一個(gè)反向索引(Inverted Index)。查找數(shù)據(jù)的時(shí)候,直接查找該索引。所以,Elastic 數(shù)據(jù)管理的頂層單位就叫做 Index(索引),它是單個(gè)數(shù)據(jù)庫(kù)的同義詞。每個(gè) Index (即數(shù)據(jù)庫(kù))的名字必須是小寫。
下面的命令可以查看當(dāng)前節(jié)點(diǎn)的所有 Index:
$ curl -X GET 'http://localhost:9200/_cat/indices?v'3..44.?Document
Index 里面單條的記錄稱為 Document(文檔)。許多條 Document 構(gòu)成了一個(gè) Index。Document 使用 JSON 格式表示,下面是一個(gè)例子。
{"user": "張三","title": "工程師","desc": "數(shù)據(jù)庫(kù)管理" }同一個(gè) Index 里面的 Document,不要求有相同的結(jié)構(gòu)(scheme),但是最好保持相同,這樣有利于提高搜索效率。
5. Type
Document 可以分組,比如weather這個(gè) Index 里面,可以按城市分組(北京和上海),也可以按氣候分組(晴天和雨天)。這種分組就叫做 Type,它是虛擬的邏輯分組,用來(lái)過(guò)濾 Document。不同的 Type 應(yīng)該有相似的結(jié)構(gòu)(schema),舉例來(lái)說(shuō),id字段不能在這個(gè)組是字符串,在另一個(gè)組是數(shù)值。這是與關(guān)系型數(shù)據(jù)庫(kù)的表的一個(gè)區(qū)別。性質(zhì)完全不同的數(shù)據(jù)(比如products和logs)應(yīng)該存成兩個(gè) Index,而不是一個(gè) Index 里面的兩個(gè) Type(雖然可以做到)。
下面的命令可以列出每個(gè) Index 所包含的 Type。
$ curl 'localhost:9200/_mapping?pretty=true'根據(jù)規(guī)劃,Elastic 6.x 版只允許每個(gè) Index 包含一個(gè) Type,7.x 版將會(huì)徹底移除 Type。
6. 分片和復(fù)制理
理論上,索引可以存儲(chǔ)盡可能多的數(shù)據(jù),但是這種情況下性能往往不太樂觀,或者常見的磁盤容量限制也不能允許。所以 Elasticsearch 提供了類似于 MongoDB 中的分片功能,該功能能將索引細(xì)分為多個(gè)分片。每個(gè)分片本身是一個(gè)功能完全和獨(dú)立的“索引”,可以托管在集群中的任何節(jié)點(diǎn)上。
同樣的,有分片技術(shù)來(lái)處理數(shù)據(jù)量增長(zhǎng)快速的問題,就意味著需要復(fù)制技術(shù)來(lái)應(yīng)對(duì)這種過(guò)程中數(shù)據(jù)安全的問題(其實(shí)不只是該過(guò)程,任何情況下都應(yīng)該有安全意識(shí))。Elasticsearch 允許您將索引分片的一個(gè)或多個(gè)副本轉(zhuǎn)換為所謂的副本分片。復(fù)制技術(shù)為我們提供了數(shù)據(jù)的高可用性和搜索吞吐的擴(kuò)展性。不過(guò)需要注意的是,副本分片從不分配在與從其復(fù)制的原始/主分片相同的節(jié)點(diǎn)上。
總而言之,每個(gè)索引可以拆分為多個(gè)分片。索引也可以復(fù)制為零(意味著沒有副本)或更多次。一旦復(fù)制,每個(gè)索引將具有主分片(從索引復(fù)制的原始分片)和副本分片(主分片的副本)。開發(fā)者可以在創(chuàng)建索引時(shí)就為每個(gè)索引定義分片和副本的數(shù)量。創(chuàng)建索引后,可以隨時(shí)動(dòng)態(tài)更改副本數(shù),但不能在此過(guò)程后隨即更改分片數(shù)。
總結(jié)
以上是生活随笔為你收集整理的ElasticSearch—基本概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关键字—修饰方法、类、属性和变量的关键字
- 下一篇: Doug Cutting—搜索之父