【Elasticsearch 7 搜索之路】(一)什么是 Elasticsearch氛赐?

本篇文章對 Elasticsearch 做了基本介紹魂爪,在后續(xù)將通過專欄的方式持續(xù)更新,本系列以 Elasticsearch7 作為主要的講解版本艰管,歡迎各位大佬指正滓侍,共同學(xué)習(xí)進步漲工資!

一般涉及大型數(shù)據(jù)庫的電子商務(wù)和搜索引擎的產(chǎn)品都面臨這樣一個問題牲芋,產(chǎn)品信息檢索花費時間太長撩笆。這不良的用戶體驗,可能導(dǎo)致失去潛在的客戶缸浦。這種滯后搜索歸因于產(chǎn)品設(shè)計所使用到關(guān)系數(shù)據(jù)庫夕冲,數(shù)據(jù)分散在多個表中,關(guān)系型數(shù)據(jù)處理這些表中數(shù)據(jù)獲取搜索結(jié)果時工作速度是遠遠不能瞞足餐济≡爬蓿可以說,現(xiàn)在的企業(yè)正在尋找數(shù)據(jù)存儲的替代品絮姆,以期促進快速檢索醉冤,而 Elasticsearch(ES)的出現(xiàn)很好解決這些問題。

image

1篙悯、什么是 Elasticsearch蚁阳?

Elasticsearch 是基于 Lucene 的搜索引擎。它提供了一個分布式多用戶能力的全文搜索引擎鸽照,基于RESTful Web接口螺捐。

換句話說,Elasticsearch 是用 Java 開發(fā)的開源,獨立數(shù)據(jù)庫服務(wù)器定血∨獍基本上,它用于全文搜索和分析澜沟。它從各種來源獲取數(shù)據(jù)灾票,并將其存儲為針對搜索進行了高度優(yōu)化的復(fù)雜格式。如上所述茫虽,Elasticsearch 將 Apache Lucene 作為搜索的核心刊苍。由于 Lucene 只是一個庫,使用起來有一定難度濒析。但是你不必擔(dān)心正什,Elasticsearch 對搜索引擎操作都進行封裝 ,可以通過使用對應(yīng)的 Restful 的 API 進行操作号杏。使用 Elasticsearch 可以快速有效地存儲婴氮,搜索和分析大量數(shù)據(jù),而且在處理半結(jié)構(gòu)化數(shù)據(jù)(即自然語言)時特別有用馒索。

2莹妒、Elasticsearch 能做什么?

平時我們在 GitHub 上進行搜索的時候绰上,Github 不僅可以幫我們找到相隔的代碼產(chǎn)庫旨怠,還可以幫助實現(xiàn)代碼級的搜索及搜索詞的高亮的顯示,蜈块。當(dāng)你在網(wǎng)上購物的時候鉴腻,它也可以幫助你做商品的推薦。當(dāng)你下班的時候百揭,Elasticsearch 可以幫助你定位附件的乘客和司機爽哎,幫助平臺優(yōu)化調(diào)度,除了搜索器一,結(jié)合 Kibana课锌、Logstash、Beats 的 ELK(Elastic Stack) 還被廣泛使用在大數(shù)據(jù)近實時分析的領(lǐng)域祈秕,包括了日志分析渺贤、指標(biāo)監(jiān)控、信息安全等多個領(lǐng)域请毛,它可以幫助你探索海量的志鞍、結(jié)構(gòu)化的、非結(jié)構(gòu)化的數(shù)據(jù)方仿,按需創(chuàng)建是可視化報表固棚,對監(jiān)控數(shù)據(jù)設(shè)置報警閥值统翩。

image

3、Elasticsearch 5此洲、6厂汗、7版本特性史

V5.x

  • Lucene 6.x,
  • 性能提升,默認(rèn)打分機制從 TF-IDF 改為 BM 25
  • 支持 Ingest 節(jié)點黍翎、 Completion suggested 面徽、Java REST 客戶端
  • Type 標(biāo)記成 deprecated,支持了 Keyword 的類型
  • 性能優(yōu)化
    • 減少了內(nèi)部爭競爭艳丛,防止對同一文檔進行并發(fā)更新的競爭以及在同步事務(wù)日志時減少了鎖定要求匣掸,索引吞吐量已得到了極大的提高
    • Instant Aggregations,在 Shard 層面提供了 Aggregation 緩存
    • 新增了 Profile API

V6.x

  • Lucene 7.x
  • Removal of types氮双,在 6.0 里面碰酝,開始不支持一個 index 里面存在多個 type
  • 跨多個Elasticsearch集群搜索,保留原來的索引在 5.x 群集戴差,跨群集搜索來同時搜索 6.x 和 5.x 群集
  • 跨群集復(fù)制(CCR)
  • 更友好的的升級及數(shù)據(jù)遷移送爸,在主要版本之間的遷移更為簡化,體驗升級
  • 性能優(yōu)化
    • 稀疏區(qū)域改進暖释,降低了存儲成本
    • 通過索引排序袭厂,可加快排序的查詢性能

V7.x

  • Lucene 8.0
  • 重大改進-正式廢除單個索引下多 Type 的支持
  • 7.1開始,Security 功能免費使用
  • ECK球匕,允許用戶在 Kubernetes 上配置纹磺,管理和操作 Elasticsearch 集群
  • TransportClient 被廢棄
    以至于,ES7 的 Java 代碼亮曹,只能使用 restclient
  • 新功能
    • 新的集群協(xié)調(diào)
    • 功能更完善的 REST Client
    • Script Score Query橄杨,下一代的評分方式
  • 性能優(yōu)化
    • 默認(rèn)的 Primary Shard 數(shù)從 5 改為 1,避免 Over Sharding
    • 性能優(yōu)化照卦,更快的 Top K 檢索

4式矫、Elasticsearch 基本概念

要了解 Elasticsearch ,首先要先了解下面的幾個專有名詞役耕,索引(Index)采转、文檔( Document)、類型(Type)

索引(Index)

  • Index 一索引是文檔的容器瞬痘,是一類文檔的結(jié)合
    • Index 體現(xiàn)了邏輯空間的概念:每個索引都有自己的 Mapping故慈,用于定義包含的文檔的字段名和字段類型
    • Shard 體現(xiàn)了物理空間的概念:索引中的數(shù)據(jù)分散在 Shard 上
  • 索引的 Mapping 與 Settings
    • Mapping 定義文檔字段的類型
    • Setting 定義不同的數(shù)據(jù)分布

定義不同的數(shù)據(jù)分布

{
  "movies" : {
    "settings" : {
      "index" : {
        "creation_date" : "1570452552",
        "number_of_shards" : "5",
        "number_of_replicas" : "1",
        "uuid" : "pB0UsxjfQT2fW-s8Uy-Nsg",
        "version" : {
          "created" : "2030599"
        }
      }
    }
  }
}

定義文檔字段的類型

{
    "movie": {
        "mappings": {
            "doc": {
                "properties": {
                    "songName": {
                        "type": "text"
                    },
                    "singer": {
                        "type": "text"
                    },
                    "price": {
                        "type": "integer"
                    }
                }
            }
        }
    }
}

索引有不同語義,在 ES 中指的是在集群中創(chuàng)建的索引(名詞)图云,也可以指的是文檔到 ES 的過程(動詞)惯悠,即是一次倒排索引的過程。而在其他地方看到索引更多表示 B 樹索引或者倒排索引竣况。

文檔( Document)

  • Elasticsearch 是面向文檔的克婶,文檔是所有可搜索數(shù)據(jù)的最小單位
    • 日志文件中的日志項
    • 一本電影的具體信息
    • 一首歌的詳細信息
  • 文檔會被序列化成 JSON 格式筒严,保存在 Elasticsearch 中
    • JSON 對象由字段組成,
    • 每個字段都有對應(yīng)的字段類型(字符串/數(shù)值/布爾/日期/二進制/范圍類型)
  • 每個文檔都有一個 Unique ID
    • 可以自己指定 ID 或者通過 Elasticsearch 自動生成

案例

{
    "songName" : "說好不哭",
    "singer" : "周杰倫",
    "price" : 3
}

文檔的元數(shù)據(jù)

{
  "_index" : "song",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "songName" : "說好不哭",
    "singer" : "周杰倫",
    "price" : 3
  }
}
  • 元數(shù)據(jù)情萤,用于標(biāo)注文檔的相關(guān)信息
    • _index :文檔所屬的索引名
    • _type :文檔所屬的類型名
    • _id :文檔唯一 Id
    • _source:文檔的原始 JSON 數(shù)據(jù)
    • _all:整合所有字段內(nèi)容到該字段鸭蛙,已被廢除
    • _version:文檔的版本信息
    • _score:相關(guān)性打分

類型(Type)

  • 在 7.0 之前,一個 Index 可以設(shè)置多個 Types
  • 6.0 開始筋岛, Type 已經(jīng)被 Deprecated娶视。7.0 開始一個索引,只能創(chuàng)建一個 Type -"_doc"睁宰。

5肪获、RDBMS VS Elasticsearch

下面是 RDBMS 和 Elasticsearch 一個不是很恰當(dāng)類比,Elasticsearch 集群可以包含多個索引 Indes(數(shù)據(jù)庫)柒傻,每一個索引可以包含一個doc類型 Type(表)孝赫,每一個類型包含多個文檔 Document(記錄),然后每個文檔包含多個字段 Fields(列)红符,DSL 相當(dāng)于 RDBMS 的 SQL青柄。

RDBMS Elasticsearch
Schema Mapping
Table Index(Type)
Column Filed
Row Document
SQL DSL

6、小結(jié)

與傳統(tǒng) SQL 數(shù)據(jù)庫管理系統(tǒng)(其花費10秒鐘以上的時間來獲取所需的搜索查詢數(shù)據(jù))相比预侯,Elasticsearch 可以在10毫秒內(nèi)完成此操作致开。由于 Elasticsearch 具有分布式架構(gòu),因此它可以擴展到數(shù)千個服務(wù)器并容納PB級的數(shù)據(jù)萎馅。我們不必管理分布式設(shè)計的復(fù)雜性双戳,因為 ES 已經(jīng)自動完成。我們有多種方法可以為一些文檔建立索引或查詢它們校坑,然而在使用 ES 下拣技,我們可以輕松實現(xiàn)在海量數(shù)據(jù)快速檢索全文,得到我們想要的結(jié)果耍目。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膏斤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子邪驮,更是在濱河造成了極大的恐慌莫辨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毅访,死亡現(xiàn)場離奇詭異沮榜,居然都是意外死亡,警方通過查閱死者的電腦和手機喻粹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門蟆融,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人守呜,你說我怎么就攤上這事型酥∩胶” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵弥喉,是天一觀的道長郁竟。 經(jīng)常有香客問我,道長由境,這世上最難降的妖魔是什么棚亩? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮虏杰,結(jié)果婚禮上讥蟆,老公的妹妹穿的比我還像新娘。我一直安慰自己嘹屯,他們只是感情好攻询,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著州弟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪低零。 梳的紋絲不亂的頭發(fā)上婆翔,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天剃浇,我揣著相機與錄音矫渔,去河邊找鬼。 笑死钢拧,一個胖子當(dāng)著我的面吹牛雄妥,可吹牛的內(nèi)容都是我干的最蕾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼老厌,長吁一口氣:“原來是場噩夢啊……” “哼瘟则!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起枝秤,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤醋拧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后淀弹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丹壕,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年薇溃,在試婚紗的時候發(fā)現(xiàn)自己被綠了菌赖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡沐序,死狀恐怖琉用,靈堂內(nèi)的尸體忽然破棺而出忿峻,到底是詐尸還是另有隱情,我是刑警寧澤辕羽,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布逛尚,位于F島的核電站,受9級特大地震影響刁愿,放射性物質(zhì)發(fā)生泄漏绰寞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一铣口、第九天 我趴在偏房一處隱蔽的房頂上張望滤钱。 院中可真熱鬧,春花似錦脑题、人聲如沸件缸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽他炊。三九已至,卻和暖如春已艰,著一層夾襖步出監(jiān)牢的瞬間痊末,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工哩掺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凿叠,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓嚼吞,卻偏偏與公主長得像盒件,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子舱禽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

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