由於工作中接觸到了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...