ElasticSearch 是基于 Lucene 實(shí)現(xiàn)的開源、分布式挽牢、RESTful接口的全文搜索引擎。Elasticsearch還是一個(gè)分布式文檔數(shù)據(jù)庫禽拔,其中每個(gè)字段均是被索引的數(shù)據(jù)且可被搜索刘离,它能夠擴(kuò)展至數(shù)以百計(jì)的服務(wù)器存儲(chǔ)以及處理PB級(jí)的數(shù)據(jù)。它可以在很短的時(shí)間內(nèi)存儲(chǔ)睹栖、搜索和分析大量的數(shù)據(jù)硫惕。它通常作為具有復(fù)雜搜索場景情況下的核心發(fā)動(dòng)機(jī)。
1 Lucene
Lucene是一套用于全文檢索和搜索的開放源代碼程序庫野来,由Apache軟件基金會(huì)支持和提供恼除。
Lucene 官網(wǎng) https://lucene.apache.org/
2 倒排索引
倒排索引源于實(shí)際應(yīng)用根據(jù)屬性值來查找記錄。這種索引表中的每一項(xiàng)都包括一個(gè)屬性值和具有該屬性值的各記錄的地址曼氛。由于不是由記錄來確定屬性值缚柳,而是有屬性來確定記錄位置,因而成為倒排索引(inverted index)
3 索引詞 (term)
在ElasticSearch中索引詞(term) 是一個(gè)能夠被索引的精確值搪锣。索引詞是可以通過term 查詢進(jìn)行準(zhǔn)確的搜索
4 文本 (text)
文本是一段普通的非結(jié)構(gòu)化的文字秋忙。通常,文本會(huì)被分析成一個(gè)個(gè)的索引詞(term),存儲(chǔ)在Elasticsearch的索引庫中构舟。
為了讓文本能夠進(jìn)行搜索灰追,文本字段需要事先進(jìn)行分析;當(dāng)對(duì)文本中的關(guān)鍵詞進(jìn)行查詢的時(shí)候狗超,搜索引擎應(yīng)該根據(jù)搜索條件搜索出原文本弹澎。
5 分析(analysis)
分析是將文本轉(zhuǎn)換成索引詞的過程,分析的結(jié)果依賴于分詞器
比如:FOO BAR努咐、Foo-Bar和foo bar這幾個(gè)單詞有可能會(huì)被分析成相同的索引詞foo和bar苦蒿,這些索引詞存儲(chǔ)在Elasticsearch的索引庫中。當(dāng)用FoO:bAR進(jìn)行全文搜索的時(shí)候渗稍,搜索引擎根據(jù)匹配計(jì)算也能在索引庫中搜索出之前的內(nèi)容佩迟。這就是Elasticsearch的搜索分析。
6 集群(cluster)
集群由一個(gè)或多個(gè)節(jié)點(diǎn)組成竿屹,對(duì)外提供服務(wù)报强,對(duì)位提供索引和搜索功能
- 不同集群通過不同的名字來區(qū)分,默認(rèn)名字elasticsearch
- 通過修改文件修改拱燃,或者在命令行中 -E cluster.name= XXXX 進(jìn)行設(shè)定
7 節(jié)點(diǎn)(node)
一個(gè)節(jié)點(diǎn)是一個(gè)邏輯上獨(dú)立的服務(wù)秉溉,他是集群的一部分,可以存儲(chǔ)數(shù)據(jù),并參與集群的索引和搜索功能召嘶。
**Master node: **主節(jié)點(diǎn)父晶,只有主節(jié)點(diǎn)才能修改集群的狀態(tài)信息。集群狀態(tài)包括(所有節(jié)點(diǎn)信息弄跌;所有的索引和相關(guān)的Mapping與Setting信息甲喝;分片路由信息)
**Master-eligible node: **Master-eligible 可以參加選主流程嗎,成為主節(jié)點(diǎn)
Data Node: 保存數(shù)據(jù)的節(jié)點(diǎn)碟绑,負(fù)責(zé)保存分片數(shù)據(jù)俺猿。在數(shù)據(jù)擴(kuò)展上起到了至關(guān)重要的作用
**Coordinating Node: **負(fù)責(zé)接受Client 的請(qǐng)求,將請(qǐng)求發(fā)布到合適的節(jié)點(diǎn)格仲,最終把結(jié)果匯集到一起押袍,是每個(gè)節(jié)點(diǎn)默認(rèn)都起到Coordinating Node 的職責(zé)
Machine Learning Node 負(fù)責(zé)跑機(jī)器學(xué)習(xí)的任務(wù),用來做異常檢測凯肋,發(fā)出告警
8 分片 (shard)
分片是單個(gè)Lucene實(shí)例谊惭,這是Elasticsearch管理的比較底層的功能。索引是指向主分片和副本分片的邏輯空間
主分片:每個(gè)文檔都存儲(chǔ)在一個(gè)分片中侮东,當(dāng)你存儲(chǔ)一個(gè)文檔的時(shí)候圈盔,系統(tǒng)會(huì)首先存儲(chǔ)在主分片中悄雅,然后會(huì)復(fù)制到不同的副本中
副本分片:每一個(gè)分片有零個(gè)或多個(gè)副本。主要作用:增加高可用性(當(dāng)主分片失敗的時(shí)候众眨,可以從副本分片中選擇一個(gè)主分片)娩梨,提高性能(當(dāng)查詢的時(shí)候可以到主分片或者副本分片中進(jìn)行查詢)
為什么分片览徒,分片原因:
- 允許水平分割擴(kuò)展數(shù)據(jù)
- 允許分配和并行操作從而提高性能和吞吐量
9 路由(routing)
當(dāng)存儲(chǔ)一個(gè)文檔的時(shí)候,他會(huì)存儲(chǔ)在唯一的主分片中纽什,具體那個(gè)分片是通過散列值選擇友雳。
默認(rèn)情況下,這個(gè)值是由文檔的ID生成。如果文檔有一個(gè)指定的父文檔,則從父文檔ID中生成涕俗,該值可以在存儲(chǔ)文檔的時(shí)候進(jìn)行修改神帅。
10 復(fù)制 (replica)
解決整個(gè)集群的單點(diǎn)問題。當(dāng)網(wǎng)絡(luò)中某個(gè)節(jié)點(diǎn)出現(xiàn)問題的時(shí)候元镀,復(fù)制可以對(duì)故障進(jìn)行轉(zhuǎn)移霎桅,保證系統(tǒng)的高可用性
- 一個(gè)復(fù)制分片不會(huì)存儲(chǔ)在同一個(gè)節(jié)點(diǎn)上
11 索引 (index)
索引是相同結(jié)果的文檔集合。
12 類型(type)
在索引中遇革,可以定義一個(gè)或者多個(gè)類型揭糕,類型是索引的邏輯分區(qū)
13 文檔(document)
文檔是存儲(chǔ)在Elasticsearch 中的一個(gè)JSON 格式的字符串。他就像在關(guān)系數(shù)據(jù)庫中表的一行揪漩。
每個(gè)存儲(chǔ)在索引中的一個(gè)文檔都有一個(gè)類型和一個(gè)ID吏口,每個(gè)文檔都是一個(gè)JSON對(duì)象,存儲(chǔ)了零個(gè)或者多個(gè)字段嫩海,或者鍵值對(duì)囚痴。
原始的JSON 文檔被存儲(chǔ)在 _source的字段中。當(dāng)搜索文檔時(shí)候默認(rèn)返回的就是這個(gè)字段奕谭。
14 字段(field)
文檔中包含零個(gè)或者多個(gè)字段痴荐,字段可以是一個(gè)簡單的值(例如字符串、整數(shù)难捌、日期),也可以是一個(gè)數(shù)組或?qū)ο蟮那短捉Y(jié)構(gòu)员淫。
字段類似于關(guān)系數(shù)據(jù)庫中表的列击敌。
每個(gè)字段都對(duì)應(yīng)一個(gè)字段類型,例如整數(shù)圣蝎,字符串衡瓶,對(duì)象等。字段還可以指定如何分析該字段的值步淹。
15 映射(mapping)
映射想關(guān)系數(shù)據(jù)庫中的表結(jié)構(gòu)诚撵,每一個(gè)索引都有一個(gè)映射,它定義了索引中的每一個(gè)字段類型澈驼,以及一個(gè)索引范圍的設(shè)置筛武。一個(gè)映射可以實(shí)現(xiàn)被定義,或者在第一次存儲(chǔ)文檔的時(shí)候自動(dòng)識(shí)別内边。
16 主鍵(ID)
ID是一個(gè)文件的唯一標(biāo)識(shí)待锈,如果在存庫的時(shí)候沒有提供ID,系統(tǒng)會(huì)自動(dòng)生成一個(gè)ID和屎,文檔的index/type/id必須是唯一的春瞬。