ES(Elasticsearch)


基本概念

Elasticsearch是一個實時分布式搜索和分析引擎

支持:

  1. 全文搜索
  2. 結構化搜索
  3. 分析

可以這樣進行描述:

  • 分布式的實時文件存儲,每個字段都被索引並可被搜索
  • 分布式的實時分析搜索引擎
  • 可以擴展到上百台服務器,處理PB級結構化或非結構化數據

所有的這些功能被集成到一個服務里面,你的應用可以通過簡單的RESTful API、各種語言的客戶端甚至命令行與之交互。
java也有自己的客戶端

與ES交互

ES節點

一個Elasticsearch實例是一個節點,一組節點組成了集群。Elasticsearch集群中的節點可以配置為3種不同的角色:

  • 主節點:
    控制Elasticsearch集群,負責集群中的操作,比如創建/刪除一個索引,跟蹤集群中的節點,分配分片到節點。主節點處理集群的狀態並廣播到其他節點,並接收其他節點的確認響應。

每個節點都可以通過設定配置文件elasticsearch.yml中的node.master屬性為true(默認)成為主節點。

對於大型的生產集群來說,推薦使用一個專門的主節點來控制集群,該節點將不處理任何用戶請求。

  • 數據節點:
    持有數據和倒排索引。默認情況下,每個節點都可以通過設定配置文件elasticsearch.yml中的node.data屬性為true(默認)成為數據節點。如果我們要使用一個專門的主節點,應將其node.data屬性設置為false。
  • 客戶端節點:
    如果我們將node.master屬性和node.data屬性都設置為false,那么該節點就是一個客戶端節點,扮演一個負載均衡的角色,將到來的請求路由到集群中的各個節點。

Elasticsearch集群中作為客戶端接入的節點叫協調節點。協調節點會將客戶端請求路由到集群中合適的分片上。對於讀請求來說,協調節點每次會選擇不同的分片處理請求,以實現負載均衡。

 

es底層數據儲存

1、底層數據結構

Elasticsearch使用了Apache Lucene,底層結構使用的是倒排索引

倒排索引就建立分詞與文檔之間的映射關系,在倒排索引之中,數據時面向分詞的而不是面向文檔的。

來自網上的一段解釋:

文檔是Elasticsearch的數據單位,對文檔中的詞項進行分詞,並創建去重詞項的有序列表,將詞項與其在文檔中出現的位置列表關聯,便形成了倒排索引。

我們來看下如下2個文檔是如何被倒排索引的:

文檔1(Doc 1): Insight Data Engineering Fellows Program
文檔2(Doc 2): Insight Data Science Fellows Program

詞項 文檔

元數據

所在文檔

data

Doc 1, Doc 2

engineering

Doc 1

fellows

Doc 1, Doc 2

insight

Doc 1, Doc 2

program

Doc 1, Doc 2

science

Doc 2

如果我們想找包含詞項"insight"的文檔,我們可以掃描這個(單詞有序的)倒排索引,找到"insight"並返回包含改詞的文檔ID,示例中是Doc 1和Doc 2。

2、數據寫操作

數據新建

  • Elasticsearch集群中的每個節點都包含了改節點上分片的元數據信息。協調節點(默認)使用文檔ID參與計算,以便為路由提供合適的分片。
  • 記錄translog,並將數據讀入到緩存中

流程圖: 

數據更新/刪除

  • (1)刪除
    es中的數據是不能真正被刪除的。

磁盤上的每個段都有一個相應的.del文件。當刪除請求發送后,文檔並沒有真的被刪除,而是在.del文件中被標記為刪除。該文檔依然能匹配查詢,但是會在結果中被過濾掉。
當下次再進行段合並時,這些被刪除的數據就不會被寫入到新的段中。這樣,在以后搜索匹配的過程中,就不會再次被搜索出來。

  • (2) 更新

在新的文檔被創建時,Elasticsearch會為該文檔指定一個版本號。當執行更新時,舊版本的文檔在.del文件中被標記為刪除,新版本的文檔被索引到一個新段。舊版本的文檔依然能匹配查詢,但是會在結果中被過濾掉。

3、數據讀操作

查詢

協調節點將請求路由到所有包含該文檔的節點上,每個節點單獨進行查詢,並將查詢后的結果進行相關性排序,全部分片都將匹配文檔的ID及其相關性得分返回給協調節點。協調節點創建一個優先隊列並對結果進行全局排序。默認情況下,每個分片只能發送排名前十的數據。

提取

當協調節點在生成的全局有序的文檔列表中,為全部結果排好序后,它將向包含原始文檔的分片發起請求。全部分片填充文檔信息並將其返回給協調節點。

概念解釋

    • 搜索相關性
      相關性是由搜索結果中Elasticsearch打給每個文檔的得分決定的。默認使用的排序算法是tf/idf(詞頻/逆文檔頻率)。詞頻衡量了一個詞項在文檔中出現的次數 (頻率越高 == 相關性越高),逆文檔頻率衡量了詞項在全部索引中出現的頻率,是一個索引中文檔總數的百分比(頻率越高 == 相關性越低)。最后的得分是tf-idf得分與其他因子比如(短語查詢中的)詞項接近度、(模糊查詢中的)詞項相似度等的組合。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM