01-Elasticsearch概念和相關軟體的安裝

来源:https://www.cnblogs.com/OnlyOnYourself-lzw/archive/2022/07/22/16504238.html
-Advertisement-
Play Games

一、ElasticSearch的倒排索引 1.1、資料庫存在的問題 問題1: 查詢title中包含"手機"的信息 SELECT * FROM goods WHERE title LIKE '%手機%' 使用模糊搜索,左邊有通配符,不會走索引,會全表掃描,性能低 問題2:查詢title中包含"我要買一 ...


一、ElasticSearch的倒排索引

1.1、資料庫存在的問題

  • 問題1: 查詢title中包含"手機"的信息

    • SELECT * FROM goods WHERE title LIKE '%手機%'
      
    • 使用模糊搜索,左邊有通配符,不會走索引,會全表掃描,性能低

  • 問題2:查詢title中包含"我要買一部華為手機"的信息

    • SELECT * FROM goods WHERE title LIKE '%我要買一部華為手機%'
      
    • 關係型資料庫提供的查詢,功能太弱

1.2、倒排索引

瞭解倒排索引的存儲原理

  • 使用新華字典查找漢字,先找到漢字的偏旁部首,再根據偏旁部首對應的目錄(索引)找到目標漢字

  • ES樣例

    • 文檔0(編號0):we like java java java
    • 文檔1(編號1):we like lucene lucene lucene
  • 建立倒排索引的流程

    • 首先對所有數據的內容進行拆分(分詞),拆分成唯一的一個詞語(詞條Term)

    • 然後建立詞條和每條數據的對應關係(詞條在文檔出現的位置下標,出現頻率),如下所示

    • (Term 詞條) (Doc ID,Freq 頻率) (Pos 位置)
      we (0,1) (1,1) (0,0)(1,0)
      like (0,1) (1,1) (0,1)(1,1)
      java (0,3) (2,3,4)
      lucene (1,3) (2,3,4)
  • 小結

    • 倒排索引:將每條數據中的內容進行分詞,形成詞條。然後記錄詞條和數據的唯一標識(id)的對應關係,形成的產物

二、ElasticSearch存儲和搜索原理

理解ElasticSearch存儲和搜索原理

  • 假設數據存在以下幾條數據
  • ES中存儲以及搜索原理圖如下所示
    • 說明
      • ES的資料庫我們稱其為 index (索引庫),每條數據我們稱之為 document (文檔),ES在存儲文檔的時候,會對它需要分詞的欄位內容進行切分,切分成一個個詞條,再建立每個詞條與文檔唯一標識(id)的對應關係,即倒排索引
  • 我們再回過頭看之間資料庫存在的兩個問題,通過ES是否能夠解決
    • 問題1
      • 性能低:使用模糊查詢,左邊有通配符,不會走索引,會全表掃描,性能低
      • ES解決方案:如果使用"手機"作為關鍵字查詢,ES生成的倒排索引中,詞條會排序,形成一顆樹形結構,提升詞條的查詢速度
    • 問題2
      • 功能弱:如果以"華為手機" 作為條件,查詢不出來數據
      • ES解決方案:如果使用"華為手機"作為關鍵字查詢,ES也可以對搜索的關鍵字進行分詞,比如將華為手機拆分成"華為"、"手機",然後根據兩個詞分詞去倒排索引中進行查詢,然後取結果的並集

三、ElasticSearch相關概念

理解ElasticSearch和關係型資料庫的區別以及分工

3.1、介紹

  • ElasticSearch是Java語言開發的,並作為Apache許可條款下的開放源碼發佈,基於Lucene實現,是一款分散式、高擴展、近實時的搜索服務,可以基於RESTful web介面進行操作
  • 官網:https://www.elastic.co/
  • 基於Lucene的產品
    • Slor:實時性偏弱,在高併發地寫入數據時,Slor需要頻繁地構建索引庫,而索引庫構建影響到查詢性能
    • Elasticsearch:實時性非常強(近實時),ES在頻繁地構建索引庫的同時,不太影響查詢的性能

3.2、應用場景

  • 海量數據的查詢(京東,淘寶商品搜素)
  • 日誌數據分析(ELK ElasticSearch + Logstach + Kibana 搭建日誌監控平臺)
  • 實時數據分析

3.3、ElasticSearch和MySQL的區別

  • 我們可以把傳統關係型資料庫MySQL和ElasticSearch進行一下對比

    • MySQL Elasticsearch 說明
      Database Index 索引(index),就是文檔的集合,類似資料庫(Database)
      Table Type 類型(Type),就是文檔的類型,相當於資料庫中的表(Table)
      Row Document 文檔(Document),就是一條條的數據,類似資料庫中的行(Row),文檔都是JSON格式
      Column Field 欄位(Field),就是JSON文檔中的欄位,類似資料庫中的列(Column)
      Schema Mapping Mapping(映射)是索引中文檔的約束,例如欄位類型約束。類似資料庫的表結構(Schema)
      index Everything is indexed es對存儲的所有數據都進行分詞建立索引
      SQL DSL(Domain Specification Lanuage)
  • 不難發現,兩者均有其優勢

    • MySQL:擅長事務類型操作,可以確保數據的安全和一致性,進行複雜的多表查詢
    • ElasticSearch:擅長海量數據的搜索、分析、計算
  • 因此在企業中,往往是兩者結合使用

    • 對安全性要求較高的寫操作,關係複雜的表需求,使用MySQL實現
    • 對查詢性能要求較高的搜索需求,使用Elasticsearch實現
    • 兩者再基於某種方式,實現數據的同步,保證數據一致性

3.4、小結

  • 資料庫查詢存在的問題
    • 性能低
    • 功能較弱
  • 倒排索引
    • 將文檔中欄位的內容進行分詞,形成詞條和每條數據id的對應關係
  • Elasticsearch概念以及作用
    • 搜索伺服器
    • 高性能、功能強大
    • 不是替換MySQL,es做搜索,MySQL做數據存儲
    • 索引庫(index)= 資料庫
    • 類型(type)= 表
    • 映射(mapping)= 表結構
    • 文檔(document)= 一行數據
    • 映射參數(field)= 表欄位

四、ElasticSearch的安裝

4.1、下載鏡像

  • 命令
    • docker pull elasticsearch:7.4.1
  • 如下所示
  • Windows下載很簡單,去官網下載,解壓後啟動即可使用

4.2、啟動容器

  • 命令

    • docker run -di --name=elasticsearch -p 9200:9200 -v /root/elasticsearch/plugins:/usr/share/elasticsearch/plugins -e "discovery.type=single-node" elasticsearch:7.4.1
      
    • 埠映射:9200

    • 文件夾映射:/usr/share/elasticsearch/plugins

    • 添加環境變數,名為discovery.type=single-node

    • PS:可以暫時不用理解為什麼映射這個文件夾,以及後面的"discovery.type=single-node"

  • 如下所示

4.3、瀏覽器訪問

五、Kibana的安裝

kibana是elasticsearch的頁面可視化工具,類似MySQL的SQLyog等可視化工具

5.1、拉取鏡像

  • 命令
    • docker pull kibana:7.4.1
  • 如下所示

5.2、創建容器

  • 命令

    • docker run -id -p 5601:5601 --link elasticsearch --name=kibana -e "ELASTICSEARCH_URL=http://你的自己的ip地址:9200" kibana:7.4.0
      
  • 如下所示

5.3、瀏覽器訪問


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、簡介 Docker Hub作為Docker預設官方公共鏡像,如果想要自己搭建私有鏡像,Harbor是企業級鏡像庫非常好的選擇。 所謂私有倉庫,也就是在本地(區域網)搭建的一個類似公共倉庫的東西,搭建好之後,我們可以將將鏡像提交到私有倉庫中。這樣我們既能使用Docker來運行我們的項目鏡像, 也避 ...
  • 在.Net Framework環境下,我們使用Windows Workflow Foundation(WF)作為項目的工作流引擎,可是.Net Core已經不支持WF了,需要為基於.Net Core的項目選擇新的工作流引擎。基本要求如下: 輕量級,部署和使用都很簡單。 有相當數量的用戶,往往使用的人 ...
  • Linux中的進程 進程:已經啟動的可執行程式的運行實例 1、PID:進程的ID(每一個新進程都有一個唯一的PID) 2、PPID:父進程的ID 3、任何一個進程都可以創建一個子進程 4、在redhat 7以上,所有進程的父進程: systemd 在redhat 5,6中,所有進程的父進程: ini ...
  • 第一步:Linux中啟用串口設備。【以樹莓派4B為例】 樹莓派4B有6個串口,參考上一篇《樹莓派4B串口配置與開發》,在 /boot/config.txt 中添加一行,開啟 uart2 功能: dtoverlay=uart2 重啟後,查看是否有多出來一個 /dev/AMA1 設備: $ ls -l ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 請註意k8s在1.24版本不支持docker容器,本文使用kubeadm進行搭建 1.查看系統版本信息以及修改配置信息 1.1 安裝k8s時,臨時關閉swap ,如果不關閉在執行kubeadm部分命令會報錯 swapoff -a 或直接註釋swa ...
  • Totally Accurate Battle Simulator for Mac是由游戲廠商Landfall所發行的一款休閑策略游戲,全面戰爭模擬器Mac版是一款非常具有魔性及挑戰性的游戲,游戲人物角色非常“沙雕”,感興趣的朋友快來看一看吧~ 詳情:全面戰爭模擬器 for Mac(休閑策略類游戲) ...
  • 背景 在生產過程中,由於磁碟空間、保留周期等因素,會對系統、應用等日誌提出要求,要求系統日誌定期進行輪轉、壓縮和刪除,從而減少開銷,而系統自帶的logrotate 則是一個簡單又實用的小工具,下麵著重介紹一下,滿足日常需求。 語法 Usage: logrotate [OPTION...] <conf ...
  • 六、DSL操作ES 6.1、RESTful風格介紹 REST(Representational State Transfer 表述性狀態轉移),是一組架構約束條件和原則,滿足這些約束條件和原則的應用程式或設計就是RESTful。就是一種定義介面的規範。有以下特征: 基於HTTP 可以使用XML格式定 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...