日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

ElasticSearch 大数据搜索查询分析全指南

發(fā)布時間:2023/12/3 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch 大数据搜索查询分析全指南 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

專欄亮點

  • 本專欄采用最新的 ElasticSearch7.x 版本

    同市面上大部分的 ElasticSearch6.x 教程相比較,7 版本更新改動很大,比如新增 KQL(Kibana Query Language),內(nèi)部索引類型限定為 _doc ,還是 ES for python API 接口的改變等。

    眾所周知,在技術(shù)更新如此快的年代,掌握最新的技術(shù)就能夠在未來使用它的時候不會那么快就被淘汰。比如從 Java 的 iBatis 到 MyBatis ,從 Struts2 到 Spring MVC 再到 Spring Boot 。雖然你不能夠停止學(xué)習(xí)的腳步,但是你可以選擇插隊學(xué)習(xí),彎道超越,直接學(xué)習(xí)最新的最流行的技術(shù),這樣就比別人更領(lǐng)先一步。

  • 本專欄將針對 ES 在業(yè)務(wù)中的核心概念進(jìn)行解析,讓你不僅明白為什么使用它還能了解該怎樣選擇。

    ES 作為目前大數(shù)據(jù)方向必須掌握的技能,主要是作為工具分析挖掘業(yè)務(wù)數(shù)據(jù),因此專欄會有大量的實踐案例,涵蓋了工作中常見的業(yè)務(wù)場景,無論你是初入職場的小白,還是即將畢業(yè)的學(xué)生黨,專欄能夠給你提供各種實踐操作,手把手帶你玩轉(zhuǎn)起 ES 。而且我也將在專欄里針對大廠面試中常見的問題給出正確的解答思路。

  • 本專欄將介紹在 Java 和 Python 框架下如何運(yùn)用 ElasticSearch。

    本專欄講究變學(xué)邊做,把學(xué)的到東西能夠立即投入到公司實際業(yè)務(wù)中,所以會介紹如何在 Python 與 Java 框架下使用 ES。同時,比如制作業(yè)務(wù)分析表、Dashboard、檢測異常值、篩選數(shù)據(jù)、分組統(tǒng)計數(shù)據(jù)等功能,本專欄中不會單純貼幾個 Demo,而是會以一個更系統(tǒng)的案例來演示。

  • 專欄將針對 ES 的重要搜索功能 DSL 進(jìn)行業(yè)務(wù)分析。

    DSL 之于 ES 的重要性不言而喻,就相當(dāng)于 SQL 對于傳統(tǒng)數(shù)據(jù)庫而言。關(guān)于如何使用 DSL,對查詢效率較差語句如何進(jìn)行提高查詢效率,本專欄將針對 DSL 的查詢結(jié)合不同的業(yè)務(wù)需求進(jìn)行實現(xiàn),從簡單到深入一步步理解 DSL 。

  • 專欄前部分偏重理論,后部分偏實踐

    實踐是檢驗真理的唯一標(biāo)準(zhǔn),職場中講究的是效率,先把工具用起來,當(dāng)使用一段時間后,再去理解不同的概念,相信你會有醍醐灌頂?shù)母杏X。就像在大學(xué)里上關(guān)于數(shù)據(jù)庫的課,老師會先讓你做個學(xué)生數(shù)據(jù)庫,在慢慢告訴你什么是索引、表連接、范式等。

  • 豐富的圖片展示進(jìn)行原理和案例講解。

    🔺 如何查看相應(yīng)數(shù)據(jù)🔺 如何范圍查詢🔺 餅狀圖開發(fā)案例🔺 數(shù)據(jù)可視化案例

專欄目錄

我們首先會介紹 ElasticSearch 的基本原理概念,對 ES 有個整體的把控。

實踐是最好的學(xué)習(xí)方式,專欄之后會用 Kibana 對常見的業(yè)務(wù)需求進(jìn)行分析,作為學(xué)習(xí) ES 的開始,然后到進(jìn)階 ES 分析,對 ES 高階的分析組件進(jìn)行學(xué)習(xí)。

然后會詳細(xì)介紹 ES 開發(fā)的核心部分 DSL 的詳細(xì)介紹講解,結(jié)合目前主流的開發(fā)語言,Python 與 Java 模擬工作中常見的業(yè)務(wù)進(jìn)行開發(fā)分析。

為了加強(qiáng)對 ES 的理解,專欄最后會結(jié)合多種需求案例進(jìn)行系統(tǒng)的學(xué)習(xí)。

一 ElasticSearch 基本原理與環(huán)境搭建

  1. 關(guān)系型數(shù)據(jù)庫與 ElasticSearch 對比

  2. ElasticSearch 搜索原理之倒排索引

  3. ElasticSearch 不同角色分工

  4. 分片及副本原理

  5. 基于 Docker 部署單節(jié)點 ElasticSearch

  6. 基于 Docker 安裝 Kibana

  7. 基于 Docker 一鍵式部署分布式 ElasticSearch

二 運(yùn)用 ElasticSearch 做業(yè)務(wù)分析

  1. Discover 如何查看相應(yīng)的業(yè)務(wù)數(shù)據(jù)

  2. 如何篩選只包含某個字段的業(yè)務(wù)數(shù)據(jù)

  3. 如何自定義的查看某個時間段的數(shù)據(jù)

  4. 折線圖繪制過程與應(yīng)用場景

  5. 柱狀圖繪制過程與應(yīng)用場景

  6. 餅狀圖繪制過程與應(yīng)用場景

三 ElasticSearch 高級數(shù)據(jù)分析可視化

  1. 熱力圖在數(shù)據(jù)分析中的應(yīng)用

  2. 主題分析之標(biāo)簽云圖

  3. 業(yè)務(wù)分析進(jìn)階之腳本字段

  4. 高階時間序列數(shù)據(jù)可視化

  5. Timelion 在時間序列中的應(yīng)用

  6. Dashboard 專題數(shù)據(jù)分析可視化

四 深入理解 ElasticSearch 之搜索

  1. 基于 Rest API 的 ElasticSearch 增刪改查(1)

  2. 基于 Rest API 的 ElasticSearch 增刪改查(2)

  3. 基于 Rest API 的 ElasticSearch 增刪改查(3)

  4. 如何運(yùn)用強(qiáng)大的 ElasticSearch 核心 DSL

  5. 組合查詢怎么玩

  6. 如何根據(jù)聚合求取各種數(shù)值指標(biāo)

  7. 什么是深入嵌套聚合的萬用套法

  8. 優(yōu)化 Query 查詢效率之 Scroll 查詢

  9. 優(yōu)化聚合數(shù)據(jù)查詢效率之 Partition

五 基于 Python/Java 開發(fā)案例解析

  1. Python Elasticsearch Client 實戰(zhàn)

  2. 天氣指標(biāo)監(jiān)控數(shù)據(jù)實戰(zhàn)

  3. 天氣指標(biāo)數(shù)據(jù)篩選實戰(zhàn)

  4. 結(jié)合指標(biāo)數(shù)據(jù)場景優(yōu)化查詢效率實戰(zhàn)

  5. Java Elasticsearch Client 實戰(zhàn)

  6. 基于 Java 進(jìn)行天氣指標(biāo)數(shù)據(jù)篩選實戰(zhàn)

  7. 基于Java 優(yōu)化效率查詢

六 ElasticSearch 實戰(zhàn)業(yè)務(wù)案例上手

  1. 基于 ELK 天氣指標(biāo)監(jiān)控在線實時監(jiān)控案例

  2. 基于機(jī)器學(xué)習(xí)的 ElasticSearch 異常值檢測案例

  3. 基于 MovieLens 的電影搜索案例

你將獲得什么?

  • 最新的 ElasticSearch 特性運(yùn)用

  • ElasticSearch 業(yè)務(wù)核心技能比如 Kibana 業(yè)務(wù)分析方法,這些方法將會滿足絕大多數(shù)公司需求,餅圖,折線圖,柱狀圖,聚合分析,分桶等。

  • ElasticSearch 大數(shù)據(jù)搜索分析高級玩法比如 DSL 查詢語法的基礎(chǔ)與高級用法,了解如何使用 DSL 為全文檢索服務(wù),了解如何把 ES 當(dāng)做數(shù)據(jù)庫,使用 DSL 實現(xiàn)各種 SQL 操作。

  • Java 和 Python 框架下如何運(yùn)用 ElasticSearch

  • ElasticSearch 環(huán)境部署和搭建比如集群搭建,了解分片,實例,節(jié)點角色概念,什么是倒排索引,對 ES 有個整體的把握。

適讀人群

  • ElasticSearch 愛好者,對 ES 有強(qiáng)烈的好奇心

  • 大數(shù)據(jù)工程師,Java/Python/ES 運(yùn)維工程師,數(shù)據(jù)分析與挖掘工程師

  • 初入職場的或者即將找工作面試的同學(xué)

  • 急需 ES 解決當(dāng)前公司的業(yè)務(wù)需求

作者介紹

作者 zhupc,有豐富的大數(shù)據(jù)與機(jī)器學(xué)習(xí)工作經(jīng)驗。目前在某上市外企公司研發(fā)中心任職,負(fù)責(zé) ES 數(shù)據(jù)分析與機(jī)器學(xué)習(xí)開發(fā)工作。

擅長 Java、Python、機(jī)器學(xué)習(xí)、Kafka 和 ES 等項目開發(fā)與管理。

購買須知

  • 本專欄為圖文內(nèi)容,共計 38 篇。每周更新 2 篇,預(yù)計從 2020 年 4 月 8 日至 2020 年 6 月 15 日左右更新完畢。
  • 本專欄為虛擬產(chǎn)品,一經(jīng)付費(fèi)概不退款,敬請諒解。
  • 本專欄可在 GitChat 服務(wù)號、App 及網(wǎng)頁端 gitbook.cn 上購買,一端購買,多端閱讀。

訂閱福利

  • 訂購本專欄可獲得專屬海報(在 GitChat 服務(wù)號領(lǐng)取),分享專屬海報每成功邀請一位好友購買,即可獲得 25% 的返現(xiàn)獎勵,多邀多得,上不封頂,立即提現(xiàn)。

  • 提現(xiàn)流程:在 GitChat 服務(wù)號中點擊「我-我的邀請-提現(xiàn)」。

  • 購買本專欄后,服務(wù)號會自動彈出入群二維碼和暗號。如果你沒有收到那就先關(guān)注微信服務(wù)號「GitChat」,或者加我們的小助手「GitChatty6」咨詢。(入群方式可查看第 4 篇文末說明)。

課程內(nèi)容

ElasticSearch 是什么?

為什么要學(xué)習(xí) ElasticSearch ?

ElasticSearch(ES)作為一款優(yōu)秀的分布式搜索分析引擎,越來越受到許多互聯(lián)網(wǎng)公司的關(guān)注,像小米、滴滴出行、攜程旅游、阿里云和騰訊云等都在使用 ElasticSearch 。

最知名的應(yīng)用公司就是 GitHub,它采用 ES 作為搜索引擎對代碼進(jìn)行搜索。雖然它是一款優(yōu)秀的分布式搜索引擎,但是它強(qiáng)大的查詢、分析、聚合能力使得它與數(shù)據(jù)庫的邊界越來越模糊。因此很多大公司都喜歡用 ES 作為數(shù)據(jù)庫來存儲日志或者其他業(yè)務(wù)數(shù)據(jù),最常見的結(jié)合就是通過 Kafka 、 Redis 來作為數(shù)據(jù)源,logstash 進(jìn)行轉(zhuǎn)化,ES 對數(shù)據(jù)存儲,kibana 對數(shù)據(jù)進(jìn)行展示, ES+logstash+kibana(ELK)一體化的日志分析、業(yè)務(wù)指標(biāo)分析。

越來越多的公司使用 ElasticSearch ,這門技術(shù)已經(jīng)不僅僅是大數(shù)據(jù)工程師必須要掌握的了,ES 還提供了 Java ,python 等 API,因此 ES 將會成為 Java 工程師與 Python 工程師必不可缺的工具,靈活應(yīng)用 ES 將會成為你未來最有競爭力的能力。

為什么不使用 MySQL,Oracle 或者 Hbase

傳統(tǒng)數(shù)據(jù)庫優(yōu)點是結(jié)構(gòu)化查詢,查詢速度快、安全。但是當(dāng)數(shù)據(jù)量較大時候,無論是查詢還是插入都會變的十分緩慢,當(dāng)然 MySQL 也可以做成分布式,但是部署以及維護(hù)成本較高。Oracle 查詢速度是很快的,即使數(shù)據(jù)量較大,查詢速度也不會很慢,但是有多少公司愿意負(fù)擔(dān)這個費(fèi)用呢?

為什么不使用 Redis 或者 Hbase 呢?

對于文檔數(shù)據(jù)庫,每個數(shù)據(jù)庫都有其應(yīng)對的需求,就 Redis 而言,Redis 更適合做緩存數(shù)據(jù)庫,查詢速度非常快,但是它的數(shù)據(jù)結(jié)構(gòu)是鍵值對,不能夠進(jìn)行復(fù)雜的需求查詢,只能給一個 key 然后返回結(jié)果。Hbase 是基于Hadoop 的數(shù)據(jù)庫,它的特點是能夠存儲海量數(shù)據(jù),并且擴(kuò)展起來簡單,因為底層是基于 HDFS 的。對于實時需求任務(wù),以及在線分析就比較困難,不可能把所有數(shù)據(jù)都加載出來,或者寫一個 MapReduce job 來進(jìn)行任務(wù)分析,這樣的工程是比較耗費(fèi)資源的。

ES 是分布式的,并且在數(shù)據(jù)量超大的情況下其查詢速度也嗖嗖的快。另外對象中無論是怎樣的復(fù)雜關(guān)系,都可以用 JSON 格式表達(dá)出來,可讀性較高,ES 就是以 JSON 數(shù)據(jù)格式存儲數(shù)據(jù)。并且支持在線分析、實時分析。ES 是基于存儲、查詢、聚合分析和可視化于一體的解決方案。

什么樣的數(shù)據(jù)適合存進(jìn)去呢?

日志數(shù)據(jù),一般如果程序遇到什么問題都可以通過查詢?nèi)罩痉治鰜矶ㄎ诲e誤的地方,這種需求肯定是能夠過關(guān)鍵字查詢,能夠在線可視化分析。這個需求就不合適放在傳統(tǒng)數(shù)據(jù)庫中,因為日志冗余大,而且涉及很多文本查詢,使用傳統(tǒng)數(shù)據(jù)庫是非常不方便的,Redis 等文檔數(shù)據(jù)庫更不適合。ES 正好就是全文本檢索系統(tǒng),且是分布式的適合這個需求。另外指標(biāo)數(shù)據(jù)也是適合存進(jìn)去的,指標(biāo)實時在線監(jiān)控、報警等,ES 提供了一整套解決方案。

所以說不同的數(shù)據(jù)庫或者全文檢索系統(tǒng)都有其專門的應(yīng)用場景,當(dāng)涉及到實時,文本檢索,數(shù)據(jù)量大,可視化分析,聚合分析的時候都可以考慮使用 ES 來作為解決方案。

ElasticSearch 能夠做什么?

從數(shù)據(jù)獲取,存儲計算到可視化,ES 開發(fā)了一整套解決方案,Logstash 、Beat 負(fù)責(zé)數(shù)據(jù)抓取,ES 負(fù)責(zé)存儲計算,kibana 對數(shù)據(jù)進(jìn)行展示分析。另外還有收費(fèi)的 X-Pack 可以實現(xiàn)安全、告警、監(jiān)控和 ML 等更豐富的功能。ES 在搜索、日志分析、指標(biāo)分析和安全分析等領(lǐng)域應(yīng)用廣泛。從前端到后端到數(shù)據(jù)分析,從云服務(wù)到最流行的機(jī)器學(xué)習(xí),ES 都提供了一整套解決方案。

ElasticSearch 項目的起源是什么?

ES 起源于一款優(yōu)秀的基于 Java 開發(fā)的搜索引擎類庫——Lucene。Lucene 具有高性能、易擴(kuò)展的優(yōu)點,但是它只是一個類庫,與業(yè)務(wù)結(jié)合的比較緊密。筆者曾使用過 C# 的 Lucene.net ,當(dāng)時的業(yè)務(wù)場景是對農(nóng)村宅地基信息進(jìn)行搜索,我那時候研究類庫的使用方法,首先如何對文本分詞,分詞后如何建立索引……之后終于完成了一個全文搜索功能,踩了很多坑,學(xué)習(xí)曲線很陡峭。

另外如果有其他的項目也需要全文搜索功能,那你只能重新寫全文搜索功能業(yè)務(wù)。全文搜索只是一個功能,不應(yīng)該跟業(yè)務(wù)耦合的這么緊密,因此將這個功能單獨(dú)抽離出來作為一個服務(wù),只需要提供一個接口,就可以實現(xiàn)這個功能。因此出現(xiàn)了 Solr(Apache 開源項目),Elastic Inc(開源軟件/上市公司)的 ES ,Splunk(商業(yè)上市公司)。

圖(a)是使用 Lucene 開發(fā)項目,與業(yè)務(wù)耦合緊密,不同的項目需要重新開發(fā)全文搜索功能。

圖(b)是將全文搜索業(yè)務(wù)抽離出來作為一個云服務(wù)。

ElasticSearch 在互聯(lián)網(wǎng)開發(fā)中有多火爆?多流行?

市場上存在很多搜索引擎,相對于 Java 工程師來說 Solr 應(yīng)該是最為熟悉的,當(dāng)然 Solr 也火爆了很多年,而 Splunk 鮮為人知些,因為它是收費(fèi)的。查看最近幾年搜索引擎的排名情況,可以看出,2016 年是個分水嶺,2013 年到 2016 年 Solr 都遠(yuǎn)遠(yuǎn)超過 ES,但是 ES 在 2016 年之后,開始飛速的增長,以至超過 solr 跟 Splunk ,成為最受歡迎的一款搜索引擎。

伴隨而來就是 ElasticSearch 相關(guān)的崗位在招聘市場中陡然大增,一度出現(xiàn)供不應(yīng)求的現(xiàn)象。平均薪資水平也遠(yuǎn)高于行業(yè)內(nèi)其他工種。

關(guān)系型數(shù)據(jù)庫與 ElasticSearch 對比

基本概念對比

關(guān)系型數(shù)據(jù)庫,像最常見的 Mysql , SqlServer 都是屬于關(guān)系型數(shù)據(jù)庫,關(guān)系型數(shù)據(jù)中有這幾種概念:數(shù)據(jù)庫、表、行、列、Schema,還有 SQL 查詢語句。

以學(xué)生數(shù)據(jù)庫為例,回憶一下數(shù)據(jù)庫過程:

  1. 建學(xué)生數(shù)據(jù)庫
  2. 見一個學(xué)生表
  3. 配置學(xué)生字段,如名稱 varchar、性別 char 等
  4. 一行代表一個學(xué)生,不同的列代表這個學(xué)生不同的屬性

ES 也與關(guān)系型數(shù)據(jù)庫如出一轍,只是叫法不同,在 ES 中建一個學(xué)生數(shù)據(jù)庫步驟如下:

在 ES 中啟動一個 ES 實例,這個實例就相當(dāng)于數(shù)據(jù)庫,表在 ES 中被稱為索引 Index,行稱為文檔 Document,列稱為字段 Field ,Schema 被稱為 Mapping ,數(shù)據(jù)庫中查詢語句 SQL 在 ES 中有相應(yīng)的 DSL 查詢語句。

因此建學(xué)生索引:

  1. 配置 ES,啟動一個 ES 實例
  2. 新建一個學(xué)生索引
  3. 不需要配置字段屬性,ES 會自動識別
  4. 一個 JSON 字符串代表一個學(xué)生,JSON 字符串中有學(xué)生屬性字段 Field

具體對應(yīng)關(guān)系如下表:

RDBMS ES
Table Index(Type)
Row Document
Column Field
Schema Mapping
SQL DSL

創(chuàng)建 Table/Index 對比

傳統(tǒng)數(shù)據(jù)創(chuàng)建方式如下,使用簡單的 SQL 語句就能夠輕松創(chuàng)建,但是前提是要定義好表結(jié)構(gòu)以及數(shù)據(jù)類型。

CREATE TABLE Student(    name varchar(20),    sex char(2),    age int);

ES 基于 Http 協(xié)議的,增刪改查的接口都基于 Http ,因此它需要使用 ES 的 Rest API 才能夠創(chuàng)建,只需要將 JSON 格式的學(xué)生數(shù)據(jù)利用 Rest API PUT 給 ES 即可自動創(chuàng)建,并且可以選擇性的更改 ES 自動創(chuàng)建好的數(shù)據(jù)字段的類型 ,后面的課時中有詳細(xì)的介紹如何對 ES 進(jìn)行增刪改查。

下面的這個語法,是基于 ES 的可視化界面 Kibana 來做的,使用 PUT 的方式,索引是 student,操作是 _create 創(chuàng)建。這樣的話就會自動創(chuàng)建好索引,以及數(shù)據(jù)字段的類型,比如 name 是 text 類型,age 是 數(shù)字類型。

PUT student/_create/1{  "name":"xiaoming",  "sex":"male",  "age":18}

Row/Document 對比

傳統(tǒng)數(shù)據(jù)庫中,row 就是一行數(shù)據(jù),每行數(shù)據(jù)是一條記錄。查詢結(jié)果如下:

name     | sex  |age xiaoming | male | 18

但是在 ES 中數(shù)據(jù)記錄的方式是 documet ,插入數(shù)據(jù)是將數(shù)據(jù)看做 documet 然后以 JSON 的格式插入進(jìn)行,因此查詢返回的結(jié)果也是 JSON。

{  "took" : 10,  "timed_out" : false,  "_shards" : {    "total" : 1,    "successful" : 1,    "skipped" : 0,    "failed" : 0  },  "hits" : {    "total" : {      "value" : 1,      "relation" : "eq"    },    "max_score" : 1.0,    "hits" : [      {        "_index" : "student",        "_type" : "_doc",        "_id" : "1",        "_score" : 1.0,        "_source" : {          "name" : "xiaoming",          "sex" : "male",          "age" : 18        }      }    ]  }}

Column/ Field 對比

傳統(tǒng)數(shù)據(jù)的話每列代表一個屬性,name 列都是都是姓名并且類型是 varchar(20)。

ES 根據(jù)字段類型自動創(chuàng)建,會給 name 字段自動定義為 String 類型。

Schema /Mapping 對比

傳統(tǒng)數(shù)據(jù)庫 Schema 說明了表之間的聯(lián)系結(jié)構(gòu),字段關(guān)系主外鍵等。

而 ES 是沒有這么多復(fù)雜的關(guān)系,不存在主外鍵,表與表之間相互聯(lián)系,因此 ES 是將一個對象的 JSON 實體直接存到 ES 中,通過 mapping 來查看具體結(jié)構(gòu)。

{  "mapping": {    "properties": {      "age": {        "type": "long"      },      "name": {        "type": "text",        "fields": {          "keyword": {            "type": "keyword",            "ignore_above": 256          }        }      },      "sex": {        "type": "text",        "fields": {          "keyword": {            "type": "keyword",            "ignore_above": 256          }        }      }    }  }}

SQL/DSL 對比

兩者都是一種語法,SQL 是針對傳統(tǒng)數(shù)據(jù)庫的,DSL 是針對 ES 的。在 “創(chuàng)建 Table/Index 對比” 這個部分已經(jīng)能夠很好的說明了兩者的區(qū)別與聯(lián)系,語法不通,但是應(yīng)用場景非常的相似,像增刪改查,分組等,兩者都具備這樣的功能。

小結(jié)

本節(jié)我們明白了兩者之間的異同,就能夠很好的理解ES各個概念,本課時對傳統(tǒng)數(shù)據(jù)庫與 ES 做了一個粗略的對比,只通過本課時想要把握兩者的具體與聯(lián)系是比較困難的,想要了解更多的 ES 特性請多關(guān)注后面的實戰(zhàn)課時。

ElasticSearch 搜索原理之倒排索引

倒排索引作用

試想一下這個情景,你也記不清什么時候讀過這個一段話:“老劉,老劉,食量大似牛,吃一個老母豬不抬頭.”,只記得是紅樓夢里面的臺詞,上學(xué)的時候語文老師還解讀過,現(xiàn)在覺得特別有意思,想看看完整的這個故事。

于是你買了一本《紅樓夢》,打開目錄,定位不同章節(jié)的位置,然后按照順序一章一章的遍歷,找找哪一章里面有這么一句話。終于經(jīng)過你不懈的努力終于找到這句話來自于“劉姥姥進(jìn)大觀園”哪一章。

這個檢索的過程,映射關(guān)系是從文檔關(guān)鍵詞,因為我們是翻閱不同的章節(jié)文檔來檢索哪里出現(xiàn)了這么一句話。

這都能忍?也是服了。如何解決這個問題呢?為了查找某一個或多個關(guān)鍵詞,不得不查詢遍歷所有文檔,得出這些關(guān)鍵詞出現(xiàn)在哪些文檔中。這種方式未免也太耗時耗力了,有沒有一種方法能夠快速檢索到呢?

思考一下,我們要避免根據(jù)章節(jié)一章章的取遍歷查詢,能不能夠根據(jù)詞來定位到章節(jié)呢?像新華字典那樣,查找某個詞,然后定位到某個詞的頁數(shù),如果也對《紅樓夢》這本書也建立那樣的索引,起步不是非常的方便?

這個建索引的過程,就是所謂的倒排索引,是從關(guān)鍵詞文檔,這是一個反過程。英文叫 invert index ,你也可以理解為反索引,或者逆索引,只不過這種索引方式,大部分譯為倒排索引

創(chuàng)建倒排索引

針對《紅樓夢》這本書,我們搭建一個搜索引擎,因此人為的查找實在是太變態(tài)了。

首先以章節(jié)為 ID 建立一個《紅樓夢》數(shù)據(jù)庫。

ID Text
0 老劉,老劉,食量大似牛,吃一個老母豬不抬頭
1 女兒是水作的骨肉,男人是泥作的骨肉。
2 必得兩個女兒伴著我讀書,我方能認(rèn)得字

常規(guī)的檢索方法,遍歷 ID ,通過 ID 查找對應(yīng)的 Text 是否包含”老劉,老劉,食量大似牛,吃一個老母豬不抬頭“這句話。如果使用倒排索引該怎么做呢?

  • 首先對文檔分詞,并統(tǒng)計詞在哪個章節(jié) ID 里面
  • 生成一張"詞-章節(jié)"映射表
  • 對查找句子進(jìn)行分詞,拿著這些詞到映射表中查找,在哪個章節(jié)里面
  • 計算并排序相似度,相似度的 topN 推薦給用戶

建設(shè)倒排索引映射表(為了減少冗余,這里分詞結(jié)果沒有被全部列出):

Word ID
老劉 0
食量 0
老母豬 0
女兒 1,2
男人 1
骨肉 1
讀書 2
方能 2
兩個 2

基于倒排索引查詢

假設(shè)映射表如上,我們再對”老劉,老劉,食量大似牛,吃一個老母豬不抬頭“這句話進(jìn)行檢索,首先這句話會被分詞處理成”老劉,食量,老母豬“。

得到了這三個詞,到索引表中檢索,得到的結(jié)果是(0,3,100%),0代表章節(jié)的ID,4代表詞在對應(yīng)章節(jié)中命中的次數(shù),100%代表通過某種相似度計算方法得出的相似度(這里相似度的計算方法,假設(shè)為”相似度=檢索語句命中的詞個數(shù)/檢索語句總的詞個數(shù)“),因此就能輕易的得出,這句話很有可能出現(xiàn)在《紅樓夢》的第一章中。

再對一句話進(jìn)行檢索”女兒一定要學(xué)會讀書寫字“,這句話將會被分詞處理成”女兒,讀書,寫字“。

再到索引表中去檢索,得到

  1. (1,1,33%),第一個1代表章節(jié)ID,第二個1代表三個詞在這個章節(jié)中只命中了一個,33%代表我使用相似度方法計算的相似度。
  2. (2,2,66%),第一個2代表章節(jié)ID,第二個2代表三個詞在第2章節(jié)中命中了2個,66%是計算的相似度。

對相似度進(jìn)行排序,自然搜索引擎將會把文檔2推薦出來。這里可能會有個疑問,為什么把2推薦出來呢?這句話在紅樓夢中并不存在啊?從這里就可以看出,搜索引擎只是根據(jù)相似度進(jìn)行推薦,而并不能保證推薦的一定是對的。搜索引擎只是將數(shù)據(jù)庫中相似的案例推薦給你。

小結(jié)

通過本小節(jié)我們明白了,什么是倒排索引,以及如何建立倒排索引。對搜索引擎原理有個大致的了解,明白了搜索引擎原理,原來搜索引擎是通過相似度的指標(biāo)將文檔推薦出來,怪不得使用百度搜索關(guān)鍵詞是總是出來很多鏈接,并且越往后的鏈接越是跟想要搜索的內(nèi)容不相關(guān)。

ElasticSearch 不同角色分工

節(jié)點作用

ES 是一個分布式全文檢索引擎,既然是分布式那一定是設(shè)計多個節(jié)點甚至多個集群。為什么需要分布式呢?試想一下,如果 ES 節(jié)點只設(shè)計成一個,那么這個節(jié)點會涉及哪些工作呢?

  • 首先該節(jié)點應(yīng)該具備響應(yīng)用戶的讀寫操作
  • 該節(jié)點應(yīng)該具備存儲數(shù)據(jù)的能力
  • ES應(yīng)該具備協(xié)調(diào)多個用戶集體請求的操作
  • 另外 ES 會自動映射用戶輸入的數(shù)據(jù)類型,因此ES應(yīng)該具備自動映射數(shù)據(jù)類型的操作

節(jié)點優(yōu)化

當(dāng)然這些只是這個節(jié)點最基本,最應(yīng)該做到的功能,節(jié)點應(yīng)該具備的功能絕不會僅限于此。這么多工作都讓這個單個節(jié)點來做,服務(wù)器撐得住恐怕這個節(jié)點也不樂意了。當(dāng)多個用戶觸發(fā)寫操作,節(jié)點會協(xié)調(diào)多個用戶的請求,然后再把寫的數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,然后再把數(shù)據(jù)寫到磁盤中。整個過程,可以說任何一個過程都能夠輕易的達(dá)到瓶頸。

  • 請求響應(yīng)瓶頸:這個不難理解,如果請求過多,服務(wù)器宕機(jī)也不為過
  • 讀寫瓶頸:磁盤的寫入能力是有限的,也就是經(jīng)常說的 I/O 瓶頸
  • 協(xié)調(diào)請求以及自動映射數(shù)據(jù)類型:這個瓶頸來自于服務(wù)器 CPU 性能,CPU 需要協(xié)調(diào)多個線程來做這些事

節(jié)點分工

這個單個節(jié)點可以把它比喻為牛批的全棧工程師,啥都會,啥都干,但是一個的精力總是有限的,現(xiàn)在不是一個人單打獨(dú)斗就能解決問題,需要有一個好的 Team 才能夠成就偉大的事。ES 也是如此,既然單個節(jié)點不能夠滿足需求,那就按照任務(wù)多分配幾個節(jié)點,將任務(wù)具體到節(jié)點,不同的節(jié)點負(fù)責(zé)不同的任務(wù)。

因此 ES 為分配不同的任務(wù),定義了以下幾個節(jié)點角色:Master,Data Node,Coordinating Node,Ingest Node

Master 節(jié)點:每個 ES 節(jié)點啟動之前都會有個默認(rèn)配置 node.master:true ,也就是說每個節(jié)點都有可能成為 Master 節(jié)點,這些節(jié)點被稱作 Master-eligible nodes ,就是合格的有資格成為 Master 節(jié)點的節(jié)點。

當(dāng)然 Master 只能有一個,所以會通過選舉的方法對這啟動的節(jié)點選舉,被選中的節(jié)點才會成為 Master 節(jié)點。 Master 節(jié)點主要是負(fù)責(zé)維護(hù)集群的狀態(tài),像所有節(jié)點的信息,所有的索引和它相關(guān)的 Mapping 關(guān)系,配置信息,分片的路由等。既然 Master 節(jié)點維護(hù)了這么重要的信息,玩意它掛了怎么辦?

掛了的話,將會對其他的有資格成為 Master 節(jié)點的節(jié)點重新選舉出另一個 Master 節(jié)點,因此這就說明了其他 Master-eligible nodes 也會保存集群信息,但是只有 Master 節(jié)點有權(quán)限能夠修改,試想如果其他節(jié)點也能修改的話,這將會導(dǎo)致數(shù)據(jù)不一致的問題。

Data Node 節(jié)點:這個節(jié)點從字面上就很容易理解,數(shù)據(jù)節(jié)點,這個節(jié)點主要負(fù)責(zé)數(shù)據(jù)的存儲,在數(shù)據(jù)擴(kuò)展上起到了至關(guān)重要的作用。也就是說讀寫數(shù)據(jù)都會找到相應(yīng)的 Data Node 節(jié)點。

Coordinating Node 節(jié)點:協(xié)調(diào)節(jié)點主要負(fù)責(zé)協(xié)調(diào)客戶端的請求,將接收到的請求分發(fā)給合適的節(jié)點,并把結(jié)果匯集到一起。比如客戶端請求查詢某個索引的數(shù)據(jù),協(xié)調(diào)節(jié)點將會把請求分發(fā)給保存相關(guān)的數(shù)據(jù)的 DataNode 節(jié)點,找到相應(yīng)的分片,并把查詢到的結(jié)果都匯集返回。并且每個節(jié)點都默認(rèn)起到了 Coordinating Node 的職責(zé)。

Ingest Node: Ingest node 專門對索引的文檔做預(yù)處理,發(fā)生在對真實文檔建立索引之前。在建立索引對文檔預(yù)處理之前,先定義一個管道(pipeline),管道里指定了一系列的處理器。每個處理器能夠把文檔按照某種特定的方式轉(zhuǎn)換。比如在管道里定義一個從某個文檔中移除字段的處理器,緊接著一個重命名字段的處理器。集群的狀態(tài)也會被存儲到配置的管道內(nèi)。

定義一個管道,簡單的在索引或者bulk request(一種批量請求方法)操作上定義 pipeline 參數(shù),這樣 ingest node 就會知道哪個管道在使用。這個節(jié)點在使用過程中用的也不多,所以大概了解一下就行。

小結(jié)

本次課講述了 ES 的不同節(jié)點角色功能,從簡單的單節(jié)點 ES 可能會遇到的問題,引述到需要分布式才能解決這些問題,然后分布式需要不同的角色功能協(xié)助才能夠完成,因此我們明白了為什么 ES 節(jié)點需要哪些角色,以及這些角色能起到什么作用?

分片及副本原理
基于 Docker 部署單節(jié)點 ElasticSearch
基于 Docker 安裝 Kibana
基于 Docker 一鍵式部署分布式 ElasticSearch
Discover 如何查看相應(yīng)的業(yè)務(wù)數(shù)據(jù)
如何篩選只包含某個字段的業(yè)務(wù)數(shù)據(jù)
如何自定義的查看某個時間段的數(shù)據(jù)
折線圖繪制過程與應(yīng)用場景
柱狀圖繪制過程與應(yīng)用場景
餅狀圖繪制過程與應(yīng)用場景
熱力圖在數(shù)據(jù)分析中的應(yīng)用
主題分析之標(biāo)簽云圖
業(yè)務(wù)分析進(jìn)階之腳本字段
高階時間序列數(shù)據(jù)可視化
Timelion 在時間序列中的應(yīng)用
Dashboard 專題數(shù)據(jù)分析可視化
基于 Rest API 的 ElasticSearch 增刪改查(1)
基于 Rest API 的 ElasticSearch 增刪改查((2)
基于 Rest API 的 ElasticSearch 增刪改查(3)
如何運(yùn)用強(qiáng)大的 ElasticSearch 核心 DSL
組合查詢怎么玩
如何根據(jù)聚合求取各種數(shù)值指標(biāo)
什么是深入嵌套聚合的萬用套法
優(yōu)化 Query 查詢效率之 Scroll 查詢
優(yōu)化聚合數(shù)據(jù)查詢效率之 Partition
Python Elasticsearch Client 實戰(zhàn)
天氣指標(biāo)監(jiān)控數(shù)據(jù)實戰(zhàn)
天氣指標(biāo)數(shù)據(jù)篩選實戰(zhàn)
結(jié)合指標(biāo)數(shù)據(jù)場景優(yōu)化查詢效率實戰(zhàn)
Java Elasticsearch Client 實戰(zhàn)
基于 Java 進(jìn)行天氣指標(biāo)數(shù)據(jù)篩選實戰(zhàn)
基于Java 優(yōu)化效率查詢實戰(zhàn)
基于 ELK 天氣指標(biāo)監(jiān)控在線實時監(jiān)控案例
基于機(jī)器學(xué)習(xí)的 ElasticSearch 異常值檢測案例
基于 MovieLens 的電影搜索案例

閱讀全文: http://gitbook.cn/gitchat/column/5e8553f36a28093c950e1614

總結(jié)

以上是生活随笔為你收集整理的ElasticSearch 大数据搜索查询分析全指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。