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