ElasticSearch學習筆記1

es 的來源

問題拆解

  • 如果用數(shù)據(jù)庫來實現(xiàn)會怎么樣茫多?
  • 什么是全文檢索绷耍?
  • 什么是 Lucene吐限?

數(shù)據(jù)庫實現(xiàn)

先看第一個問題,如果我們用數(shù)據(jù)來實現(xiàn)搜索功能褂始,可能的語句就是對 string 建立索引诸典,或者直接 like 關(guān)鍵字。帶來的問題是什么崎苗?

  • (字符串掃描)如果有個字段是書籍描述狐粱,有個上千、上萬字胆数,那這個是時候進行字符串掃描可以說是非常慢肌蜻,
  • (分詞)另外,如果輸入 ** 連續(xù)性程 **必尼,如果是字符串匹配我們無法搜索出 ** 連續(xù)性方程 ** 這種關(guān)鍵詞

什么是全文檢索

全文檢索做的是倒排索引蒋搜,記錄了 word => doc 之間的關(guān)系

什么是 Lucene

  • 全文索引,倒排索引
  • Lucene 是一個 jar 包判莉,里面提供了整套的倒排索引和數(shù)據(jù)管理功能豆挽。我們用 java 開發(fā)的時候,可以引用 Lucene 包券盅,調(diào)用 Lucene 提供的 api帮哈,完成索引和數(shù)據(jù)管理功能。

什么是 ElasticSearch

ElasticSearch 就是基于 Lucene 提供了更高一級別的抽象锰镀,es 管理了好多的 Lucene但汞,每個 Lucene 都是一個實例,es 提供了集群功能互站,高可用,負載均衡等高級功能僵缺,簡單點說:ElasticSearch = (Lucene)+ 高級特性

es 的功能

  • 全文檢索:建立倒排胡桃,sql 類似于:select * from products where category_name like '% 成人用品 %
  • 數(shù)據(jù)分析:說白了就是類似于下面的 sqlselect category_id,count(1) from products group by category_id,統(tǒng)計每個類別的商品數(shù)量
  • 結(jié)構(gòu)化搜索:能夠像 sql 一樣根據(jù)字段進行查詢磕潮,例子:select * from products where category_id='成人用品' 查找成人商品

es 的特點

  • 分布式存儲(支持 PB 級別)
  • 分布式索引(倒排)
  • 分布式分析(結(jié)構(gòu)化搜索翠胰、數(shù)據(jù)分析)

es 的核心概念

  • Near Realtime(NRT):近實時,為什么說是近實時自脯,因為 es 中從數(shù)據(jù)插入到能被搜索到時間大概是秒級別
  • Cluster:集群之景,集群的默認名為 elasticsearch,一個集群會有多個 node膏潮,每個 node 都屬于一個集群
  • Node:集群中的每個節(jié)點都會有一個默認名字锻狗,默認名字的節(jié)點都會加入 elasticsearch 的集群
  • Document:文檔是 es 中的最小數(shù)據(jù)單元,每個文檔都可以用一個 json 對象來表述,每個文檔對象都有 field轻纪,每個 field 都是一個數(shù)據(jù)字段
    一個例子:
book document
{
  "book_id": "1",
  "book_name": "es 深入淺出",
  "book_desc": "通俗全市 es",
  "category_id": "1",
  "category_name": "數(shù)據(jù)庫"
}
  • Index:索引油额,包含所有結(jié)構(gòu)相似的文檔
  • Type:類型,每個索引里都可以有一個或多個 type刻帚,type 是 index 中的一個邏輯數(shù)據(jù)分類潦嘶,一個 type 下的 document,都有相同的 field崇众。最新的 es 中已經(jīng)取消了 type 概念了每個 index 都只有一個隱藏的 index
  • shard:分片掂僵,es 可以將一個 index 分為好幾個分片,每個分片可以分配到不同的 node 上顷歌。每個 shard 都是一個 Lucene 實例锰蓬。
  • replica:副本,為了保證高可用衙吩,每個 shard 都需要有幾個 replica 副本互妓,同時副本在保證高可用的同時,也能提供系統(tǒng)的吞吐量和性能(副本提供讀)坤塞。shard 會分為 primary shard (建立索引時一次設(shè)置冯勉,不能修改,默認 5 個)和 replica shard(隨時修改數(shù)量摹芙,默認 1 個)灼狰,默認每個索引 10 個 shard,5 個 primary shard浮禾,5 個 replica shard交胚。此時為了保證高可用,最小應該配備的 node 是 2 個盈电。

做一個和傳統(tǒng)關(guān)系型數(shù)據(jù)庫的對比:

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices   -> Types  -> Documents -> Fields
圖片

es的使用初步體驗

的使用初步體驗
可以說 es 使用相當簡單蝴簇,開箱即用。去官網(wǎng)下載完安裝包后匆帚,執(zhí)行 bin/elasticsearchjik 即可啟動熬词,然后訪問 http://localhost:9200/?pretty 即可返回:

{
"name": "KFKDJEu",
"cluster_name": "elasticsearch",
"cluster_uuid": "h6ZDdUy5R5qUgdpvdS6xDQ",
"version": {
"number": "5.5.0",
"build_hash": "260387d",
"build_date": "2017-06-30T23:16:05.735Z",
"build_snapshot": false,
"lucene_version": "6.6.0"
},
"tagline": "You Know, for Search"
}

去這個
name: node 名稱
cluster_name: 集群名稱(默認的集群名稱就是 elasticsearch)
version.number: 5.5.0,es 版本號
我們可以通過 config/elasticsearch.yml 來修改集群名字吸重。

我們可以下載 kibana 去操作 es互拾,第一個命令:GET _cluster/health,此處返回的結(jié)果

{
  "cluster_name": "elasticsearch",
  "status": "yellow",
  "timed_out": false,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 1,
  "active_shards": 1,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 1,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 50
}

為什么是 yellow嚎幸,因為此時我們理論上應該有 2 個 shard颜矿,一個 primary,一個 replica嫉晶,但是只有一個 node骑疆,replica 和 primary 不能在一個 node 上田篇,所以只有一個 primary 分配了,狀態(tài)是 yellow封断。

幾個狀態(tài)的明確說明:

green:每個索引的 primary shard 和 replica shard 都是 active 狀態(tài)的
yellow:每個索引的 primary shard 都是 active 狀態(tài)的斯辰,但是部分 replica shard 不是 active 狀態(tài),處于不可用的狀態(tài)
red:不是所有索引的 primary shard 都是 active 狀態(tài)的坡疼,部分索引有數(shù)據(jù)丟失了

操作說明

一般操作通過 PUT彬呻,GET,POST柄瑰,DELETE 進行區(qū)分闸氮,然后操作的時候 url 按照 index/type/id 的規(guī)則解釋。

PUT:創(chuàng)建或者覆蓋
GET:查詢
POST:更新
DELETE:刪除

常見查詢說明

1教沾、query string search:直接將產(chǎn)查詢的語句放到query上蒲跨,適合一些簡單場景
2、query DSL:特定的查詢領(lǐng)域特定語言授翻,發(fā)送請求的時候或悲,通過 json body將請求發(fā)送過去,支持復雜的語法
3堪唐、query filter
4巡语、full-text search
5、phrase search
6淮菠、highlight search
更具體的可以查看:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末男公,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子合陵,更是在濱河造成了極大的恐慌枢赔,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拥知,死亡現(xiàn)場離奇詭異踏拜,居然都是意外死亡,警方通過查閱死者的電腦和手機低剔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門速梗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人户侥,你說我怎么就攤上這事÷袜停” “怎么了蕊唐?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烁设。 經(jīng)常有香客問我替梨,道長钓试,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任副瀑,我火速辦了婚禮弓熏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘糠睡。我一直安慰自己挽鞠,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布狈孔。 她就那樣靜靜地躺著信认,像睡著了一般。 火紅的嫁衣襯著肌膚如雪均抽。 梳的紋絲不亂的頭發(fā)上嫁赏,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音油挥,去河邊找鬼潦蝇。 笑死,一個胖子當著我的面吹牛深寥,可吹牛的內(nèi)容都是我干的攘乒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼翩迈,長吁一口氣:“原來是場噩夢啊……” “哼持灰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起负饲,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤堤魁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后返十,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妥泉,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年洞坑,在試婚紗的時候發(fā)現(xiàn)自己被綠了盲链。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡迟杂,死狀恐怖刽沾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情排拷,我是刑警寧澤侧漓,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站监氢,受9級特大地震影響布蔗,放射性物質(zhì)發(fā)生泄漏藤违。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一纵揍、第九天 我趴在偏房一處隱蔽的房頂上張望顿乒。 院中可真熱鬧,春花似錦泽谨、人聲如沸璧榄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽犹菱。三九已至,卻和暖如春吮炕,著一層夾襖步出監(jiān)牢的瞬間腊脱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工龙亲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留陕凹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓鳄炉,卻偏偏與公主長得像杜耙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拂盯,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容