ElasticSearch(ES)知識積累

2021-08-19 18:23:48 字數 2507 閱讀 2406

由於工作中接觸到了es,並且驚喜的發現具有很好的效能,所以特意對其相關知識點進行總結,參考了很多網上大神的總結,這裡主要是加深自己對es的了解。

es是基於lucene的構建的高擴充套件的分布式全文檢索引擎,可以做到近乎實時的儲存,全文檢索。

集群cluster                

es是分布式全文檢索引擎,可以由多台伺服器組成,它們的集合即es集群。

節點node

每乙個伺服器,即es節點。

分片shard

當文件的資料較大的時候,單個節點的記憶體或者磁碟不足,需要多個節點,可以將資料切分成多個分片,然後分布在不同的節點上。

分片作用:

1.能夠水平擴充套件容量。

2.使得各個分片能夠分布式,並行操作,提高效能。

副本replia

每乙個分片可以有零個或乙個以上的副本,每乙個副本是分片的完整複製。

副本作用:

1.備用,當主分片失效後,副本將公升級為主分片,提高可用性。

2.當大量併發請求時,提高es負載能力,實現高吞吐量(可以理解為多一套可以查詢到庫)

接下來的基本概念通過與傳統資料進行比對,大家應該就比較好理解了。es

傳統資料庫

index 索引

database 資料庫

type 型別

table 表

document 文件

row 行

field 字段

column 列名

schema 表結構

es會對每個詞建索引           

index 索引                               

說到es,我們不得不提到倒排索引了,這個應該是es為什麼在全文檢索中這麼強大的重要因素了。

假設有一篇文件,文件為id,文件中有很多單詞。傳統資料庫,先找到該文件,然後在該文件中檢視有哪些單詞。倒排索引正好相反,採用的是,單詞->文件 的模式,文件中的所有單詞為索引,通過單詞直接定位到文件。

例如:1.我們都是好孩子。

2.今天天氣特別好。

3.我們好孩子比他們孩子多。

轉化成倒排索引就是

我們    1,3

都是 1

好 1,2,3

今天 2

天氣 2

特別 2

孩子 1,3

他們 3

多 3

事實上,倒排索引還記錄了,單詞在文件中出現的位置以及詞頻。

我們    (1,1,1),(3,1,1)

都是 (1,1,2)

好 (1,1,3),(2,1,4),(3,1,2)

今天 (2,1,1)

天氣 (2,1,2)

特別 (2,1,3)

孩子 (1,1,4),(3,2,<3,6>)

他們 (3,1,5)

多 (3,1,7)

比如孩子的
(3,2,<3,6>)
表示出現在文件3,2次,同時第3個和第6個位置出現(這裡的位置指的是詞的位置)

當我們將資料匯入到es,es便開始按照倒排索引建立索引。

前面我們主要介紹了es的主要概念,這一節就比較零碎了,主要記錄工作中使用到的es的相關知識點。

工作中的,我的字段型別都是string,但是根據具體業務邏輯,有些需要分詞有些不需要分詞。

"std_typ": ,

"seg_nm": },

} ],

"filter": [

}, }} ]}

}}上面是別人的例子,在我自己專案中,第一次查詢可能呀幾百毫秒,但是到了後面,如果有相同的filter,就只要幾十毫秒甚至幾秒(在5000w+的資料中搜尋),是越來越快的感覺。

過濾器快取是可以設定, indices.cache.filter.size ,該屬性的預設值 20%。

這三者也是工作中用到的。

match和match_phrase都會查詢的字段進行分詞,然後根據分詞的結果去匹配,只不過後者需要匹配所有的詞,而前者至少乙個。比如「我喜歡她」,match只要「我」,「喜歡」,「她」,至少滿足乙個就好,但是match_phrase 需要三者同時滿足。

term則不對字段進行分詞,也就是「我喜歡她」必須整句話滿足才行。

具體可以看

(1)模糊查詢效能比較

這裡mysql中共有300w+資料,es共500w+資料

mysql:select * from creditdefault where seg_nm like "%寶麗金%",耗時17s

es: 

}} ,耗時12ms

(2)統計效能對比

mysql:select count(distinct tel_nbr) from credit.white;耗時23.06s

es:727ms

}}}

待續

Elasticsearch ES 建立索引

個人 您可以通過 elasticsearch 的 restful api 來建立索引 put注意 預設情況下,建立的索引分片數量是 5 個,副本數量是 1 個。您可以通過如下引數來指定分片數 副本數量 通過 curl 命令來上手操作一下,我們嘗試建立乙個商品索引,看下效果 curl x put lo...

Elasticsearch(ES)集群的搭建

1.概述 elasticsearch es 集群支援分片和副本,能夠很容易的實現負載均衡 擴容 容災 高可用。今天我們就來聊一下,elasticsearch es 集群是如何搭建的。2.場景介紹 伺服器a ip 192.168.1.8 伺服器b ip 192.168.1.144 伺服器c ip 19...

數學知識 乘積 點積 內積

1 乘積 用於矩陣相乘,表示為c a b,a的列數與b的行數必須相同,c也是矩陣,c的行數等於a的行數,c的列數等於b的列數。cij為a的第i行與b的第j列的點積。2 點積 用於向量相乘,表示為c a b,a與b均為向量,c為標量,也稱標量積 內積 數量積等。數量積 dot product scal...