ES 基礎

?

1. ES 基礎一網打盡

1.1 ES定義

ES=elaticsearch簡寫, Elasticsearch是一個開源的高擴展的分布式全文檢索引擎,它可以近乎實時的存儲、檢索數據;本身擴展性很好,可以擴展到上百臺服務器,處理PB級別的數據。
Elasticsearch也使用Java開發并使用Lucene作為其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的復雜性,從而讓全文搜索變得簡單。

1.2 Lucene與ES關系?

1)Lucene只是一個庫。想要使用它,你必須使用Java來作為開發語言并將其直接集成到你的應用中,更糟糕的是,Lucene非常復雜,你需要深入了解檢索的相關知識來理解它是如何工作的。

2)Elasticsearch也使用Java開發并使用Lucene作為其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的復雜性,從而讓全文搜索變得簡單。

1.3 ES主要解決問題:

1)檢索相關數據;
2)返回統計結果;
3)速度要快。

1.4 ES工作原理

當ElasticSearch的節點啟動后,它會利用多播(multicast)(或者單播,如果用戶更改了配置)尋找集群中的其它節點,并與之建立連接。這個過程如下圖所示:

1.5 ES核心概念

1)Cluster:集群。
ES可以作為一個獨立的單個搜索服務器。不過,為了處理大型數據集,實現容錯和高可用性,ES可以運行在許多互相合作的服務器上。這些服務器的集合稱為集群。

2)Node:節點。
形成集群的每個服務器稱為節點。

3)Shard:分片。
當有大量的文檔時,由于內存的限制、磁盤處理能力不足、無法足夠快的響應客戶端的請求等,一個節點可能不夠。這種情況下,數據可以分為較小的分片。每個分片放到不同的服務器上。
當你查詢的索引分布在多個分片上時,ES會把查詢發送給每個相關的分片,并將結果組合在一起,而應用程序并不知道分片的存在。即:這個過程對用戶來說是透明的。

4)Replia:副本。
為提高查詢吞吐量或實現高可用性,可以使用分片副本。
副本是一個分片的精確復制,每個分片可以有零個或多個副本。ES中可以有許多相同的分片,其中之一被選擇更改索引操作,這種特殊的分片稱為主分片。
當主分片丟失時,如:該分片所在的數據不可用時,集群將副本提升為新的主分片。

5)全文檢索。
全文檢索就是對一篇文章進行索引,可以根據關鍵字搜索,類似于mysql里的like語句。
全文索引就是把內容根據詞的意義進行分詞,然后分別創建索引,例如”你們的激情是因為什么事情來的” 可能會被分詞成:“你們“,”激情“,“什么事情“,”來“ 等token,這樣當你搜索“你們” 或者 “激情” 都會把這句搜出來。

1.6 ES數據架構的主要概念(與關系數據庫Mysql對比)

(1)關系型數據庫中的數據庫(DataBase),等價于ES中的索引(Index)
(2)一個數據庫下面有N張表(Table),等價于1個索引Index下面有N多類型(Type),
(3)一個數據庫表(Table)下的數據由多行(ROW)多列(column,屬性)組成,等價于1個Type由多個文檔(Document)和多Field組成。
(4)在一個關系型數據庫里面,schema定義了表、每個表的字段,還有表和字段之間的關系。 與之對應的,在ES中:Mapping定義索引下的Type的字段處理規則,即索引如何建立、索引類型、是否保存原始索引JSON文檔、是否壓縮原始JSON文檔、是否需要分詞處理、如何進行分詞處理等。
(5)在數據庫中的增insert、刪delete、改update、查search操作等價于ES中的增PUT/POST、刪Delete、改_update、查GET.

1.7 ELK是什么?

ELK=elasticsearch+Logstash+kibana
elasticsearch:后臺分布式存儲以及全文檢索
logstash: 日志加工、“搬運工”
kibana:數據可視化展示。
ELK架構為數據分布式存儲、可視化查詢和日志解析創建了一個功能強大的管理鏈。 三者相互配合,取長補短,共同完成分布式大數據處理工作。

2. ES特點和優勢

1)分布式實時文件存儲,可將每一個字段存入索引,使其可以被檢索到。
2)實時分析的分布式搜索引擎。
分布式:索引分拆成多個分片,每個分片可有零個或多個副本。集群中的每個數據節點都可承載一個或多個分片,并且協調和處理各種操作;
負載再平衡和路由在大多數情況下自動完成。
3)可以擴展到上百臺服務器,處理PB級別的結構化或非結構化數據。也可以運行在單臺PC上(已測試)
4)支持插件機制,分詞插件、同步插件、Hadoop插件、可視化插件等。

3、ES性能

3.1 性能結果展示

(1)硬件配置:
CPU 16核 AuthenticAMD
內存 總量:32GB
硬盤 總量:500GB 非SSD

(2)在上述硬件指標的基礎上測試性能如下:
1)平均索引吞吐量: 12307docs/s(每個文檔大小:40B/docs)
2)平均CPU使用率: 887.7%(16核,平均每核:55.48%)
3)構建索引大小: 3.30111 GB
4)總寫入量: 20.2123 GB
5)測試總耗時: 28m 54s.

3.2必要的Head、kibana、IK(中文分詞)、graph等插件的詳細安裝和使用。?

http://blog.csdn.net/column/details/deep-elasticsearch.html

4、Elasticsearch增、刪、改、查操作深入詳解

S Restful API GET、POST、PUT、DELETE、HEAD含義:?
1)GET:獲取請求對象的當前狀態。?
2)POST:改變對象的當前狀態。?
3)PUT:創建一個對象。?
4)DELETE:銷毀對象。?
5)HEAD:請求獲取對象的基礎信息。

?

以上表為依據,?
ES中的新建文檔(在Index/type下)相當于Mysql中(在某Database的Table)下插入一行數據。

4.1新建文檔(類似mysql insert插入操作)

http://localhost:9200/blog/ariticle/1 put
{
"title":"New version of Elasticsearch released!",
"content":"Version 1.0 released today!",
"tags":["announce","elasticsearch","release"]
}

創建成功如下顯示:

{- "_index": "blog",
- "_type": "ariticle",
- "_id": "1 -d",
- "_version": 1,
- "_shards": {- "total": 2,- "successful": 1,- "failed": 0
- },
- "created": true}

4.2 檢索文檔(類似mysql search 搜索select*操作)

http://localhost:9200/blog/ariticle/1/?GET

檢索結果如下:

?

{- "_index": "blog",
- "_type": "ariticle",
- "_id": "1",
- "_version": 1,
- "found": true,
- "_source": {- "title": "New version of Elasticsearch released!",- "content": "Version 1.0 released today!",- "tags": [- "announce"- ,- "elasticsearch"- ,- "release"- ]
- }}

如果未找到會提示:

{- "_index": "blog",
- "_type": "ariticle",
- "_id": "11",
- "found": false}

查詢全部文檔如下:?

具體某個細節內容檢索,?
查詢舉例1:查詢cotent列包含版本為1.0的信息。?
http://localhost:9200/blog/?
_search?pretty&q=content:1.0

{- "took": 2,
- "timed_out": false,
- "_shards": {- "total": 5,- "successful": 5,- "failed": 0
- },
- "hits": {- "total": 1,- "max_score": 0.8784157,- "hits": [- {- "_index": "blog",- "_type": "ariticle",- "_id": "6",- "_score": 0.8784157,- "_source": {- "title": "deep Elasticsearch!",- "content": "Version 1.0!",- "tags": [- "deep"- ,- "elasticsearch"- ]- }- }- ]
- }}

查詢舉例2:查詢書名title中包含“enhance”字段的數據信息:?
[root@5b9dbaaa1a ~]# curl -XGET 10.200.1.121:9200/blog/ariticle/_search?pretty -d ‘

> { "query" : {
> "term" :
> {"title" : "enhance" }
> }
> }'
{"took" : 189,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"failed" : 0},"hits" : {"total" : 2,"max_score" : 0.8784157,"hits" : [ {"_index" : "blog","_type" : "ariticle","_id" : "4","_score" : 0.8784157,"_source" : {"title" : "enhance Elasticsearch!","content" : "Version 4.0!","tags" : [ "enhance", "elasticsearch" ]}}, {"_index" : "blog","_type" : "ariticle","_id" : "5","_score" : 0.15342641,"_source" : {"title" : "enhance Elasticsearch for university!","content" : "Version 5.0!","tags" : [ "enhance", "elasticsearch" ]}} ]}
}

查詢舉例3:查詢ID值為3,5,7的數據信息:?
[root@5b9dbaaa148a ~]# curl -XGET 10.200.1.121:9200/blog/ariticle/_search?pretty -d

{ "query" : {
"terms" :
{"_id" : [ "3", "5", "7" ] }
}
}'
{"took" : 5,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"failed" : 0},"hits" : {"total" : 3,"max_score" : 0.19245009,"hits" : [ {"_index" : "blog","_type" : "ariticle","_id" : "5","_score" : 0.19245009,"_source" : {"title" : "enhance Elasticsearch for university!","content" : "Version 5.0!","tags" : [ "enhance", "elasticsearch" ]}}, {"_index" : "blog","_type" : "ariticle","_id" : "7","_score" : 0.19245009,"_source" : {"title" : "deep Elasticsearch for university!","content" : "Version 2.0!","tags" : [ "deep", "elasticsearch", "university" ]}}, {"_index" : "blog","_type" : "ariticle","_id" : "3","_score" : 0.19245009,"_source" : {"title" : "init Elasticsearch for university!","content" : "Version 3.0!","tags" : [ "initialize", "elasticsearch" ]}} ]}
}

4.3、更新文檔(類似mysql update操作)

http://localhost:9200/blog/ariticle/1/_update/ POST
{“script”:”ctx._source.content = \”new version 2.0 20160714\”“}

更新后結果顯示:?

{“_index”: “blog”,
“_type”: “ariticle”,
“_id”: “1”,
“_version”: 2,
“_shards”: { 
”total”: 2,
“successful”: 1,
“failed”: 0
}
}

查詢&驗證更新后結果:(對比可知,版本號已經更新完畢)?
http://localhost:9200/blog/ariticle/1/

{- "_index": "blog",
- "_type": "ariticle",
- "_id": "1",
- "_version": 2,
- "found": true,
- "_source": {- "title": "New version of Elasticsearch released!",- "content": "new version 2.0 20160714",- "tags": [- "announce"- ,- "elasticsearch"- ,- "release"- ]
- }}

4.4、刪除文檔(類似mysql delete操作)

http://localhost:9200/blog/ariticle/8/回結果

{- "found": true,
- "_index": "blog",
- "_type": "ariticle",
- "_id": "8",
- "_version": 2,
- "_shards": {- "total": 2,- "successful": 1,- "failed": 0
- }}

?

?

參考:Elasticsearch增、刪、改、查操作深入詳解

參考:Elasticsearch學習,請先看這一篇!

轉載于:https://www.cnblogs.com/heqiyoujing/p/11146164.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448459.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448459.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448459.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

為什么 那么多 前端開發者都想學 Vue.js

根據JavaScript 2017 前端庫狀況調查 Vue.js是開發者最想學的前端庫。我在這里說明一下我為什么認為這也是和你一起通過使用 Vue 構建一個簡單的 App 應用程序的原因。 我最近曾與 Evan You,Chris Fritz,Sarah Drasner,和 Adam Jahr 做了一個…

進程間通信之管道通信

兩個程序之間傳遞數據的一種簡單方法是使用popen和pclose。 #include <stdio.h> FILE *popen(const char *command, const char *type); int pclose(FILE *stream); popen函數允許一個程序將另一個程序作為新進程來啟動&#xff0c;并可以傳遞數據給它或者通過它接收數據…

vue 各組件 使用 Demo

環境搭建 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 假設你已經通讀vue官方文檔&#xff08;文檔都沒讀一遍&#xff08;至少&#xff09;&#xff0c;那不建議動手擼碼&#xff…

Dropbox推獨立應用,公司估值已達100億美元

摘要&#xff1a;Dropbox剛獲得5億美元的新一輪融資&#xff0c;其估值已高達100億美元&#xff0c;現在又推出針對云服務的獨立應用Carousel&#xff0c;不久之后&#xff0c;還會有應用陸續推出&#xff0c;隨著美國前國務卿賴斯的加盟&#xff0c;Dropbox在云市場的表現異常…

SQL經典面試題(二)

有3個表S&#xff0c;C&#xff0c;SCS&#xff08;SNO&#xff0c;SNAME&#xff09;代表&#xff08;學號&#xff0c;姓名&#xff09; //主鍵&#xff1a;SNO //多個人&#xff0c;多門課 3張表 &#xff0c;SC 關系表C&#xff08;CNO&#xff0c;CNAME&#xff0c;…

進程間通信之信號he信號量

信號的篇幅較少&#xff0c;就把他和信號量放在一起了。先講講他們之間的區別&#xff1a; 1.信號&#xff1a;&#xff08;signal&#xff09;是一種處理異步事件的方式。信號時比較復雜的通信方式&#xff0c;用于通知接受進程有某種事件發生&#xff0c;除了用于進程外&…

開源當自強:我們不是“便宜貨”

之前人們爭相使用開源軟件&#xff0c;無非是因為它便宜、好用、易得&#xff0c;不過根據最新的開源軟件調查顯示&#xff0c;人們使用開源軟件最主要的原因還是看重它的高質量。 成本低是很過公司參與開源項目的最主要原因之一&#xff0c;而現在他們視開源是一條通往創新、省…

前端學習:Vue.js基本使用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Vue教程文檔&#xff1a; https://cn.vuejs.org/v2/guide/ 定義 實例&#xff1a; new Vue() 掛載點: el 數據&#xff1a;data 模…

PWE

Obstacle Override Logic The obstacle override logic provides the possibility to override obstacle within a window movement by selective switching off the anti-trap functionality.轉載于:https://www.cnblogs.com/dannykong/p/11151813.html

進程間通信之消息隊列

一、什么是消息隊列 unix早期通信機制之一的信號能夠傳送的信息量有限&#xff0c;管道則只能傳送無格式的字節流&#xff0c;這無疑會給應用程序開發帶來不便。消息隊列&#xff08;也叫做報文隊列&#xff09;則克服了這些缺點。 消息隊列就是一個消息的鏈表。可以把消息看…

“ 愿我如星君如月,夜夜流光相皎潔 ...”

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 永遠相信愛情 ... 從一而終 ... --------------------------------------------------------------------------- 后記&#xff1a;2…

python內建函數和工廠函數的整理

內建函數參閱&#xff1a; https://www.cnblogs.com/pyyu/p/6702896.html 工廠函數&#xff1a; 本篇博文比較粗糙&#xff0c;后續會深入整理轉載于:https://www.cnblogs.com/qiang-upc/p/11155786.html

顯卡天梯圖:2014最新顯卡性能天梯圖

隨著電腦游戲的推廣&#xff0c;很多用戶都喜歡上了電腦網絡游戲&#xff0c;所以組裝電腦用戶在裝機的時候&#xff0c;會考慮電腦配置的游戲性能&#xff0c;要提高電腦配置游戲性能首要條件就是顯卡性能要強&#xff0c;如果顯卡性能不佳&#xff0c;那么其它方面性能再強&a…

進程間通信之分別用共享內存和信號量實現賣票

利用共享內存實現的賣票系統&#xff1a; 利用flag來保證同一時間只有一個程序使用內存&#xff0c;使用結束還原。 #include <stdio.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <string.h> #include <…

shiro 的 @RequiresPermissions 注解使用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 權限控制是shiro最核心的東西 Shiro權限聲明通常是使用以冒號分隔的表達式。一個權限表達式可以清晰的指定資源類型&#xff0c;允許的…

【顯卡天梯圖】2014年最新顯卡天梯圖 – 【迄今最全系列顯卡】

【顯卡天梯圖】2014年最新顯卡天梯圖 – 【迄今最全系列顯卡】 隨著電腦游戲的推廣&#xff0c;很多用戶都喜歡上了電腦網絡游戲&#xff0c;所以組裝電腦用戶在裝機的時候&#xff0c;會考慮電腦配置的游戲性能&#xff0c;要提高電腦配置游戲性能首要條件就是顯卡性能要強&am…

原理系列:Spark1.x 生態圈一覽

Spark生態圈&#xff0c;也就是BDAS&#xff08;伯克利數據分析棧&#xff09;&#xff0c;是伯克利APMLab實驗室精心打造的&#xff0c;力圖在算法&#xff08;Algorithms&#xff09;、機器&#xff08;Machines&#xff09;、人&#xff08;People&#xff09;之間通過大規模…

SpringMVC 注解 : @ModelAttribute

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 SpringMVC 注解 &#xff1a; ModelAttribute 的用法如上。 轉自&#xff1a;https://blog.csdn.net/lovesomnus/article/details/78873…

網絡編程項目(聊天室項目)

一、實現目標 一個在Linux下可以使用的聊天軟件&#xff0c;要求至少實現如下功能&#xff1a; 1. 采用Client/Server架構 2. Client A 登陸聊天服務器前&#xff0c;需要注冊自己的ID和密碼 3. 注冊成功后&#xff0c;Client A 就可以通過自己的ID和密碼登陸聊天服務器 4…

CPU天梯圖:2014年最新CPU性能天梯圖

用戶在組裝電腦的前期需要考慮怎么選擇適合自己的CPU&#xff0c;現在CPU性能強的比較貴&#xff0c;便宜的CPU性能又比較差&#xff0c;選擇性價比高并且適合自己的處理器還真是比較花心思。在2014年的時候&#xff0c;最主流熱門的AMD處理器是AMD A10-6800K&#xff0c;最新推…