ElasticSearch開篇

1.ElasticSearch簡介

1.1 ElasticSearch(簡稱ES)

Elasticsearch是用Java開發并且是當前最流行的開源的企業級搜索引擎。能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。

1.2 ElasticSearch與Lucene的關系

Lucene可以被認為是迄今為止最先進、性能最好的、功能最全的搜索引擎庫(框架)

但是想要使用Lucene,必須使用Java來作為開發語言并將其直接集成到你的應用中,并且Lucene的配置及使用非常復雜,你需要深入了解檢索的相關知識來理解它是如何工作的。

Lucene缺點:

1)只能在Java項目中使用,并且要以jar包的方式直接集成項目中.

2)使用非常復雜-創建索引和搜索索引代碼繁雜

3)不支持集群環境-索引數據不同步(不支持大型項目)

4)索引數據如果太多就不行,索引庫和應用所在同一個服務器,共同占用硬盤.共用空間少.

2. Lucene全文檢索框架

2.1 什么是全文檢索

數據總體分為兩種:結構化數據和非結構化數據

結構化數據:指具有固定格式或有限長度的數據,如數據庫,元數據等。

非結構化數據:指不定長或無固定格式的數據,如 互聯網數據、郵件,word文檔等。

即全文數據的搜索主要有兩種方法:順序掃描法和反向索引法

順序掃描法:所謂順序掃描法,就是順序掃描每個文檔內容,看看是否有要搜索的關鍵字,實現查 找文檔的功能,也就是根據文檔找詞。

反向索引法:所謂反向索引,就是提前將搜索的關鍵字建成索引,然后再根據索引查找文檔,也就 是根據詞找文檔。

這種先建立 索引 ,再對索引進行 搜索 文檔的過程就叫 全文檢索(Full**-**text Search) 。

全文檢索是指:

  • 通過一個程序掃描文本中的每一個單詞,針對單詞建立索引,并保存該單詞在文本中的位置、以及出現的次數
  • 用戶查詢時,通過之前建立好的索引來查詢,將索引中單詞對應的文本位置、出現的次數返回給用戶,因為有了具體文本的位置,所以就可以將具體內容讀取出來了

2.2 分詞原理之倒排索引

img

倒排索引總結:

索引就類似于目錄,平時我們使用的都是索引,都是通過主鍵定位到某條數據,那么倒排索引呢,剛好相反,數據對應到主鍵.這里以一個博客文章的內容為例:

1.索引

文章ID文章標題文章內容
1淺析JAVA設計模式JAVA設計模式是每一個JAVA程序員都應該掌握的進階知識
2JAVA多線程設計模式JAVA多線程與設計模式結合

2.倒排索引

假如,我們有一個站內搜索的功能,通過某個關鍵詞來搜索相關的文章,那么這個關鍵詞可能出現在標題中,也可能出現在文章內容中,那我們將會在創建或修改文章的時候,建立一個關鍵詞與文章的對應關系表,這種,我們可以稱之為倒排索引,因此倒排索引,也可稱之為反向索引.如:

關鍵詞文章ID
JAVA1
設計模式1,2
多線程2

注:這里涉及中文分詞的問題

3. Elasticsearch中的核心概念

3.1 索引 index

? 一個索引就是一個擁有幾分相似特征的文檔的集合。比如說,你可以有一個客戶數據的索引,另一個產 品目錄的索引,還有一個訂單數據的索引。一個索引由一個名字來標識(必須全部是小寫字母的),并 且當我們要對對應于這個索引中的文檔進行索引、搜索、更新和刪除的時候,都要使用到這個名字。在 一個集群中,可以定義任意多的索引。

3.2 映射 mapping

ElasticSearch中的映射(Mapping)用來定義一個文檔

mapping是處理數據的方式和規則方面做一些限制,如某個字段的數據類型、默認值、分詞器、是否被索引等等,這些都是映射里面可以設置的

3.3 字段Field

? 相當于是數據表的字段|列,對文檔數據根據不同屬性進行的分類標識

3.4 字段類型 Type

? 每一個字段都應該有一個對應的類型,例如:Text、Keyword、Byte等.

? 在一個索引中,你可以定義一種或多種類型。一個類型是你的索引的一個邏輯上的分類/分區,其語義 完全由你來定。通常,會為具有一組共同字段的文檔定義一個類型。比如說,我們假設你運營一個博客 平臺并且將你所有的數據存儲到一個索引中。在這個索引中,你可以為用戶數據定義一個類型,為博客

? 數據定義另一個類型,當然,也可以為評論數據定義另一個類型。

3.5 文檔 document

? 一個文檔是一個可被索引的基礎信息單元,類似一條記錄。文檔以JSON(Javascript Object Notation)格式來表示;。比如,你可以擁有某一個客戶的文檔,某一個產品的一個文 檔,當然,也可以擁有某個訂單的一個文檔。文檔以JSON(Javascript Object Notation)格式來表 示,而JSON是一個到處存在的互聯網數據交互格式。 在一個index/type里面,你可以存儲任意多的文檔。注意,盡管一個文檔,物理上存在于一個索引之 中,文檔必須被索引/賦予一個索引的type。

3.6 集群 cluster

? 一個集群就是由一個或多個節點組織在一起,它們共同持有整個的數據,并一起提供索引和搜索功能

3.7 節點 node

? 一個節點是集群中的一個服務器,作為集群的一部分,它存儲數據,參與集群的索引和搜索功能

3.8 分片和副本 shards&replicas

3.8.1 分片

? 一個索引可以存儲超出單個結點硬件限制的大量數據。比如,一個具有10億文檔的索引占據1TB的磁盤空間,而任一節點都沒有這樣大的磁盤空間;或者單個節點處理搜索請求,響應太慢

? 為了解決這個問題,Elasticsearch提供了將索引劃分成多份的能力,這些份就叫做分片。

? 每個分片本身也是一個功能完善并且獨立的“索引”,這個“索引”可以被放置到集群中的任何節點上

分片很重要,主要有兩方面的原因

	允許水平分割/擴展你的內容容量允許在分片之上進行分布式的、并行的操作,進而提高性能/吞吐量

至于一個分片怎樣分布,它的文檔怎樣聚合回搜索請求,是完全由Elasticsearch管理的,對于作為用戶來說,這些都是透明的

3.8.2 副本

? 在一個網絡/云的環境里,失敗隨時都可能發生,在某個分片/節點不知怎么的就處于離線狀態,或者由于任何原因消失了,這種情況下,有一個故障轉移機制是非常有用并且是強烈推薦的。為此目的,Elasticsearch允許你創建分片的一份或多份拷貝,這些拷貝叫做副本分片,或者直接叫副本

  • 副本之所以重要,有兩個主要原因
  • 在分片/節點失敗的情況下,提供了高可用性。

注意到復制分片從不與原/主要(original/primary)分片置于同一節點上是非常重要的

  1. 擴展搜索量/吞吐量,因為搜索可以在所有的副本上并行運行

每個索引可以被分成多個分片。一個索引有0個或者多個副本

一旦設置了副本,每個索引就有了主分片和副本分片,分片和副本的數量可以在索引

創建的時候指定

在索引創建之后,可以在任何時候動態地改變副本的數量,但是不能改變分片的數量

8.ES數據管理

38.1 基本操作

  1. 創建索引

格式: PUT /索引名稱 舉例: PUT /es_db

  1. 查詢索引

格式: GET /索引名稱 舉例: GET /es_db

  1. 刪除索引

格式: DELETE /索引名稱 舉例: DELETE /es_db

  1. 添加文檔

格式: PUT /索引名稱/類型/id

  1. 修改文檔

格式: PUT /索引名稱/類型/id

注意:POST和PUT都能起到創建/更新的作用

1、需要注意的是PUT需要對一個具體的資源進行操作也就是要確定id才能進行更新/創建,而POST是可以針對整個資源集合進行操作的,如果不寫id就由ES生成一個唯一id進行創建==新文檔,如果填了id那就針對這個id的文檔進行創建/更新

2、PUT只會將json數據都進行替換, POST只會更新相同字段的值

3、PUT與DELETE都是冪等性操作, 即不論操作多少次, 結果都一樣

  1. 查詢文檔

格式: GET /索引名稱/類型/id 舉例: GET /es_db/_doc/1

  1. 刪除文檔

格式: DELETE /索引名稱/類型/id 舉例: DELETE /es_db/_doc/1

9.Restful認識

Restful是一種面向資源的架構風格,可以簡單理解為:使用URL定位資源,用HTTP動詞(GET,POST,DELETE,PUT)描述操作。 基于Restful API ES和所有客戶端的交互都是使用JSON格式的數據.

其他所有程序語言都可以使用RESTful API,通過9200端口的與ES進行通信

GET查詢、PUT添加、POST修改、DELE刪除

使用Restful的好處:

透明性,暴露資源存在。

充分利用 HTTP 協議本身語義,不同請求方式進行不同的操作

10.查詢操作

10.1 查詢當前類型中的所有文檔 _search

格式: GET /索引名稱/類型/_search

舉例: GET /es_db/_doc/_search SQL: select * from student

10.2 條件查詢, 如要查詢age等于28歲的 _search?q=:**

格式: GET /索引名稱/類型/_search?q=:** 舉例: GET /es_db/_doc/_search?q=age:28

10.3 范圍查詢, 如要查詢age在25至26歲之間的 _search?q=*[ TO **] 注意: TO 必須為大寫

格式: GET /索引名稱/類型/_search?q=***[25 TO 26] 舉例: GET /es_db/_doc/_search?q=age[25 TO 26]

10.4 根據多個ID進行批量查詢 _mget

格式: GET /索引名稱/類型/_mget 舉例: GET /es_db/_doc/_mget

10.5 查詢年齡小于等于28歲的 :<=

格式: GET /索引名稱/類型/_search?q=age:<=** 舉例: GET /es_db/_doc/_search?q=age:<=28

10.6 查詢年齡大于28前的 :>

格式: GET /索引名稱/類型/_search?q=age:>** 舉例: GET /es_db/_doc/_search?q=age:>28

10.7 分頁查詢 from=&size=

格式: GET /索引名稱/類型/_search?q=age[25 TO 26]&from=0&size=1 舉例: GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1

10.8 對查詢結果只輸出某些字段 _source=字段,字段

格式: GET /索引名稱/類型/_search?_source=字段,字段 舉例: GET /es_db/_doc/_search?_source=name,age

10.9 對查詢結果排序 sort=字段:desc/asc

格式: GET /索引名稱/類型/_search?sort=字段 desc 舉例: GET /es_db/_doc/_search?sort=age:desc

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

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

相關文章

Angular項目升級的一般步驟?

升級Angular項目是一個重要的任務&#xff0c;可以帶來性能改進、新功能和安全性增強等好處。以下是升級Angular項目的一般步驟&#xff1a; 1、備份項目文件&#xff1a; 在進行升級之前&#xff0c;務必對整個項目進行備份&#xff0c;以防意外情況發生。 2、查看當前版本&…

如何快速遷移其他云服務器中的網站數據到騰訊云輕量應用服務器中?教你使用寶塔Linux面板遷移網站

要快速遷移其他云服務器中的網站數據到騰訊云輕量應用服務器中&#xff0c;可以遵循以下步驟&#xff1a; 準備遷移前的工作&#xff1a;首先&#xff0c;確保你已經有了從其他云服務器到騰訊云輕量應用服務器的數據備份。這一步是為了在遷移過程中避免數據丟失或損壞。 使用寶…

模擬器抓HTTP/S的包時如何繞過單向證書校驗(XP框架)

模擬器抓HTTP/S的包時如何繞過單向證書校驗&#xff08;XP框架&#xff09; 逍遙模擬器無法激活XP框架來繞過單向的證書校驗&#xff0c;如下圖&#xff1a; ?? 解決辦法&#xff1a; 安裝JustMePlush.apk安裝Just Trust Me.apk安裝RE管理器.apk安裝Xposedinstaller_逍遙64位…

智能邊緣小站 CloudPond(低延遲、高帶寬和更好的數據隱私保護)

智能邊緣小站 CloudPond(低延遲、高帶寬和更好的數據隱私保護) 邊緣小站的主要功能是管理用戶在線下部署的整機柜設施&#xff0c;一個邊緣小站關聯一個華為云指定的區域和一個用戶指定的場地&#xff0c;相關的資源運行狀況監控等。 邊緣計算 邁入5G和AI時代&#xff0c;新…

利用redis實現秒殺功能

6、秒殺優化 這個是 圖靈 的redis實戰里面的一個案例 6.1 秒殺優化-異步秒殺思路 我們來回顧一下下單流程 當用戶發起請求&#xff0c;此時會請求nginx&#xff0c;nginx會訪問到tomcat&#xff0c;而tomcat中的程序&#xff0c;會進行串行操作&#xff0c;分成如下幾個步驟…

基于單片機的紅外遙控解碼程序設計與實現

摘要:該文介紹基于士蘭半導體芯片(SC6122)的紅外發射遙控器,通過單片機解碼程序,實現紅外遙控信號的解碼和接收。紅外接收頭與單片機特定的引腳連接,通過設置單片機定時計數器,采樣來自紅外接收頭的高、低電平寬度解碼遙控信號。該解碼程序設計主要應用在LED數碼顯示控制…

電機的極數和槽數,機械角度和電角度,霍爾IC,內外轉子

什么是電機的極數和槽數&#xff1f; 【第7集】②?正弦波驅動的轉矩脈動、正弦電流的時序和相位變化、超前角控制&#xff08;超前角調整&#xff09;、正弦波驅動的各種波形 - 電源設計電子電路基礎電源技術信息網站_羅姆電源設計R課堂 (rohm.com.cn) 下面為您介紹表示電機…

supervisor進程管理器-supervisord管理hyperf項目

Supervisor安裝 # 安裝 epel 源&#xff0c;如果此前安裝過&#xff0c;此步驟跳過 yum install -y epel-release # 安裝supervisor yum install -y supervisor # 設置supervisor開機自啟動 systemctl enable supervisord # 啟動supervisord服務 systemctl start supervisord…

新概念英語第二冊(72)

【New words and expressions】生詞和短語&#xff08;7&#xff09; racing n. 競賽 per prep. 每 Utah n. 猶他&#xff08;美國州名&#xff09; horsepower n. 馬力…

Java虛擬機(JVM)從入門到實戰【上】

Java虛擬機&#xff08;JVM&#xff09;從入門到實戰【上】&#xff0c;涵蓋類加載&#xff0c;雙親委派機制&#xff0c;垃圾回收器及算法等知識點&#xff0c;全系列6萬字。 一、基礎篇 P1 Java虛擬機導學課程 P2 初識JVM 什么是JVM Java Virtual Machine 是Java虛擬機。…

3.2日-線性模型,基礎優化方法,線性回歸從零開始實現

3.2日-線性模型&#xff0c;基礎優化方法&#xff0c;線性回歸從零開始實現 1線性模型衡量預估質量訓練數據總結2基礎優化方法3 線性回歸從零開始實現 1線性模型 衡量預估質量 訓練數據 總結 2基礎優化方法 梯度下降是一種優化算法&#xff0c;常用于機器學習和深度學習中&…

autojs Intent跳轉申請忽略電池優化頁面 和判斷是否已加入忽略優化白名單

//打開電池優化申請 判斷是否加入白名單 importClass(android.os.PowerManager); // importClass(android.Settings) //安卓setting 中有設置界面的各種activity var pm context.getSystemService(context.POWER_SERVICE);if (!pm.isIgnoringBatteryOptimizations(currentPa…

進程的信號

目錄 信號(signal)入門 技術應用角度的信號 注意 用kill -l命令可以察看系統定義的信號列表 信號處理常見方式概覽 產生信號 1.通過終端(鍵盤)按鍵產生信號 signal函數 2. 調用系統函數向進程發信號 kill 函數 raise 函數 3.由軟件條件產生的信號 alarm 函數 4.硬…

pytorch基礎4-自動微分

專題鏈接&#xff1a;https://blog.csdn.net/qq_33345365/category_12591348.html 本教程翻譯自微軟教程&#xff1a;https://learn.microsoft.com/en-us/training/paths/pytorch-fundamentals/ 初次編輯&#xff1a;2024/3/2&#xff1b;最后編輯&#xff1a;2024/3/3 本教程…

【Java EE】JUC(java.util.concurrent) 的常見類

目錄 &#x1f334;Callable 接口&#x1f38d;ReentrantLock&#x1f340;原子類&#x1f333;線程池&#x1f332;信號量 Semaphore??CountDownLatch、?相關面試題 &#x1f334;Callable 接口 Callable 是?個 interface . 相當于把線程封裝了?個 “返回值”. ?便程序…

什么是灰色預測

灰色預測是一種基于灰色系統理論的預測方法&#xff0c;用于處理數據不完全、信息不充分或未知的情況下的預測問題。它適用于樣本數據較少、無法建立精確的數學模型的情況。 灰色預測的基本思想是利用已知數據的特點和規律來推斷未知數據的發展趨勢。它的核心是灰色關聯度的概念…

(學習日記)2024.03.01:UCOSIII第三節 + 函數指針 (持續更新文件結構)

寫在前面&#xff1a; 由于時間的不足與學習的碎片化&#xff0c;寫博客變得有些奢侈。 但是對于記錄學習&#xff08;忘了以后能快速復習&#xff09;的渴望一天天變得強烈。 既然如此 不如以天為單位&#xff0c;以時間為順序&#xff0c;僅僅將博客當做一個知識學習的目錄&a…

Kubernetes: 本地部署dashboard

本篇文章主要是介紹如何在本地部署kubernetes dashboard, 部署環境是mac m2 下載dashboard.yaml 官網release地址: kubernetes/dashboard/releases 本篇文章下載的是kubernetes-dashboard-v2.7.0的版本&#xff0c;通過wget命令下載到本地: wget https://raw.githubusercont…

【Python】進階學習:pandas--isin()用法詳解

【Python】進階學習&#xff1a;pandas–isin()用法詳解 &#x1f308; 個人主頁&#xff1a;高斯小哥 &#x1f525; 高質量專欄&#xff1a;Matplotlib之旅&#xff1a;零基礎精通數據可視化、Python基礎【高質量合集】、PyTorch零基礎入門教程&#x1f448; 希望得到您的訂閱…

【NDK系列】Android tombstone文件分析

文件位置 data/tombstone/tombstone_xx.txt 獲取tombstone文件命令&#xff1a; adb shell cp /data/tombstones ./tombstones 觸發時機 NDK程序在發生崩潰時&#xff0c;它會在路徑/data/tombstones/下產生導致程序crash的文件tombstone_xx&#xff0c;記錄了死亡了進程的…