日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Elasticsearch 學(xué)習(xí)一(基礎(chǔ)入門).

 python_lover 2022-02-24

一、Elasticsearch 簡(jiǎn)介

你可以這么形容 Elasticsearch :

  • 一個(gè)分布式的實(shí)時(shí)文檔存儲(chǔ),每個(gè)字段都可以被索引與搜索
  • 一個(gè)分布式近實(shí)時(shí)分析搜索引擎
  • 能勝任上百個(gè)服務(wù)節(jié)點(diǎn)的擴(kuò)展,并支持 PB 級(jí)別的結(jié)構(gòu)化或者非結(jié)構(gòu)化數(shù)據(jù)

Elasticsearch 是一個(gè)實(shí)時(shí)分布式搜索和分析引擎,建立在一個(gè)全文搜索引擎庫(kù) Apache Lucene 基礎(chǔ)之上,而 Lucene 是當(dāng)下最先進(jìn)、高性能、全功能的搜索引擎庫(kù)。

但是 Lucene 僅僅只是一個(gè)庫(kù)。為了充分發(fā)揮其功能,你需要使用 Java 并將 Lucene 直接集成到應(yīng)用程序中。 更糟糕的是,您可能需要獲得信息檢索學(xué)位才能了解其工作原理,因?yàn)?Lucene 非常復(fù)雜。

Elasticsearch 也是使用 Java 編寫的,它的內(nèi)部使用 Lucene 做索引與搜索,但是它的目的是使全文檢索變得簡(jiǎn)單,通過隱藏 Lucene 的復(fù)雜性,取而代之的提供一套簡(jiǎn)單一致的 RESTful API。

  • 維基百科使用 Elasticsearch 提供全文搜索并高亮關(guān)鍵字,以及輸入實(shí)時(shí)搜索(search-asyou-type)和搜索糾錯(cuò)(did-you-mean)等搜索建議功能。
  • 英國(guó)衛(wèi)報(bào)使用 Elasticsearch 結(jié)合用戶日志和社交網(wǎng)絡(luò)數(shù)據(jù)提供給他們的編輯以實(shí)時(shí)的反饋,以便及時(shí)了解公眾對(duì)新發(fā)表的文章的回應(yīng)。
  • StackOverflow 結(jié)合全文搜索與地理位置查詢,以及 more-like-this 功能來(lái)找到相關(guān)的問題和答案。
  • Github 使用 Elasticsearch 檢索 1300 億行的代碼。
  • ...

Elasticsearch 不僅用于大型企業(yè),它還讓像 DataDog 以及 Klout 這樣的創(chuàng)業(yè)公司將最初的想法變成可擴(kuò)展的解決方案,Elasticsearch 可以在你的筆記本上運(yùn)行,也可以在數(shù)以百計(jì)的服務(wù)器上處理 PB 級(jí)別的數(shù)據(jù)。

二、Elasticsearch 安裝

三、Elasticsearch 基本概念

文檔(Document)

JSON 格式,Elasticsearch 存儲(chǔ)的最小單位,可以理解為是關(guān)系型數(shù)據(jù)庫(kù)中的一條記錄,每個(gè)文檔都有自己的一個(gè) unique id。

文檔元數(shù)據(jù),用于標(biāo)注文檔的相關(guān)信息

  • _index:文檔所屬的索引名
  • _type:文檔所屬的類型名
  • _source:文檔的原始Json數(shù)據(jù)
  • _id:文檔唯一id
  • _version:文檔版本信息
  • _score:文檔相關(guān)度打分

_score 相關(guān)度是一個(gè)很重要的概念,闡明了 Elasticsearch 在全文屬性上搜索并返回相關(guān)性最強(qiáng)的結(jié)果,這是完全區(qū)別于傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的一個(gè)概念,數(shù)據(jù)庫(kù)中的一條記錄要么匹配要么不匹配。

文檔(Document)是不可變的:它們不能被修改,只能被替換。因此對(duì)于 Document 的所有修改操作,在其內(nèi)部都要經(jīng)歷檢索-修改-重建索引的處理過程。

索引(Index)、類型(Type)

索引(Index)是文檔的一個(gè)容器,類比于關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)概念,索引中的 setting 里定義有多少個(gè) shards 來(lái)存儲(chǔ)索引數(shù)據(jù),數(shù)據(jù)是如何分布。

PUT /blogs
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}

類型(Type)可以理解成關(guān)系型數(shù)據(jù)庫(kù)中的 Table。

因此 每個(gè)索引(Index)包含多個(gè)類型(Type),不同的類型存儲(chǔ)著多個(gè)文檔(Document),每個(gè)文檔又有多個(gè)屬性(Field)

分片、副本

一個(gè)運(yùn)行中的 Lucene 實(shí)例稱為一個(gè)分片,分片是數(shù)據(jù)的容器,文檔保存在分片內(nèi),分片又被分配到集群內(nèi)的各個(gè)節(jié)點(diǎn)里。當(dāng)你的集群規(guī)模擴(kuò)大或者縮小時(shí),Elasticsearch 會(huì)自動(dòng)的在各節(jié)點(diǎn)中遷移分片,使得數(shù)據(jù)仍然均勻分布在集群里。

一個(gè)分片可以是主分片或者副本分片。

主分片用于解決水平擴(kuò)展問題,將索引海量數(shù)據(jù)分布到集群內(nèi)所有的節(jié)點(diǎn)之上(默認(rèn)通過 id 的 hash),主分片在索引創(chuàng)建的時(shí)候確定,后續(xù)不允許修改(除非 Reindex 操作進(jìn)行修改)。

副本分片是用于解決高可用問題,當(dāng)主分配出現(xiàn)問題時(shí),副本分片會(huì)被集群升級(jí)為主分片,副本分片個(gè)數(shù)的決定了寫入性能和讀取吞吐量,副本數(shù)量越多寫入性能越差,但讀取吞吐量就會(huì)越高,在運(yùn)行中的集群上是可以動(dòng)態(tài)調(diào)整副本分片數(shù)目的。

PUT /blogs/_settings
{
   "number_of_replicas" : 2
}

如果主分片和副本分片都集中在一個(gè)節(jié)點(diǎn)上,那是沒辦法做到高可用的。ES 的集群監(jiān)控狀態(tài)會(huì)返回 yellow(表示全部主分片都正常運(yùn)行,副本分片沒有全部處在正常狀態(tài))。因此,需要啟動(dòng)更多的節(jié)點(diǎn)來(lái)承載副本分片。

集群、節(jié)點(diǎn)

一個(gè)運(yùn)行中的 Elasticsearch 實(shí)例稱為一個(gè)節(jié)點(diǎn),而集群是由一個(gè)或者多個(gè)擁有相同 cluster.name 配置的節(jié)點(diǎn)組成,它們共同承擔(dān)數(shù)據(jù)和負(fù)載的壓力。當(dāng)有節(jié)點(diǎn)加入集群中或者從集群中移除節(jié)點(diǎn)時(shí),集群將會(huì)重新平均分布所有的數(shù)據(jù)。

Master 節(jié)點(diǎn),負(fù)責(zé)管理集群范圍內(nèi)的所有變更,例如增加、刪除索引,或者增加、刪除節(jié)點(diǎn)等,而 Master 節(jié)點(diǎn)并不需要涉及到文檔級(jí)別的變更和搜索等操作。

Data 節(jié)點(diǎn),存儲(chǔ)數(shù)據(jù)節(jié)點(diǎn)。

Coordinating (協(xié)調(diào))節(jié)點(diǎn),負(fù)責(zé)接收客戶端請(qǐng)求,分發(fā)請(qǐng)求到其他節(jié)點(diǎn),最后再將數(shù)據(jù)匯集響應(yīng)給客戶端。集群中得任何節(jié)點(diǎn)都可以作為協(xié)調(diào)節(jié)點(diǎn),包括主節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都知道任意文檔所處的位置。

集群中的節(jié)點(diǎn)通過端口 9300 彼此通信。如果這個(gè)端口沒有打開,節(jié)點(diǎn)將無(wú)法形成一個(gè)集群。

四、Elasticsearch 數(shù)據(jù)和檢索

Elasticsearch 是面向文檔的,使用 JSON 作為文檔的序列化格式,而且 Elasticsearch 不僅存儲(chǔ)文檔,還索引每個(gè)文檔的內(nèi)容,使之可以被檢索、排序和過濾,而這也是 Elasticsearch 能支持復(fù)雜全文檢索的原因。

在 Elasticsearch 中, 每個(gè)字段的所有數(shù)據(jù)都是默認(rèn)被索引的。即每個(gè)字段都有為了快速檢索設(shè)置的專用倒排索引。而且,不像其他多數(shù)的數(shù)據(jù)庫(kù),它能在同一個(gè)查詢中使用所有這些倒排索引,并以驚人的速度返回結(jié)果。

我們可以使用 RESTful API 通過端口 9200(默認(rèn))和 Elasticsearch 進(jìn)行通信,可以使用 kibana 訪問 Elasticsearch ,甚至可以直接使用 curl 命令來(lái)和 Elasticsearch 交互。

curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'

VERB:適當(dāng)?shù)?HTTP 方法或謂詞 : GET、POST、PUT、HEAD 或者 DELETE。
PROTOCOL:http 或者 https。
HOST:Elasticsearch 集群中任意節(jié)點(diǎn)的主機(jī)名,或者用 localhost 代表本地機(jī)器上的節(jié)點(diǎn)。
PORT:Elasticsearch HTTP 服務(wù)的端口號(hào),默認(rèn)是 9200.
PATH:API 的終端路徑(例如 _count 將返回集群中文檔數(shù)量)。Path 可能包含多個(gè)組件,例如:_cluster/stats 和 _nodes/stats/jvm 。
QUERY_STRING:可選,查詢字符串參數(shù) (例如 ?pretty 將格式化地輸出 JSON 返回值,使其更容易閱讀)
BODY:可選,一個(gè) JSON 格式的請(qǐng)求體

更多 DSL 語(yǔ)法可以參考:https://www./guide/en/elasticsearch/reference/7.9/search-search.html

如果你正在使用 Java,在代碼中你可以使用 Elasticsearch 內(nèi)置的兩個(gè)客戶端:

節(jié)點(diǎn)客戶端(Node client)
節(jié)點(diǎn)客戶端作為一個(gè)非數(shù)據(jù)節(jié)點(diǎn)加入到本地集群中。換句話說(shuō),它本身不保存任何數(shù)據(jù),但是它知道數(shù)據(jù)在集群中的哪個(gè)節(jié)點(diǎn)中,并且可以把請(qǐng)求轉(zhuǎn)發(fā)到正確的節(jié)點(diǎn)。

傳輸客戶端(Transport client)
輕量級(jí)的傳輸客戶端可以將請(qǐng)求發(fā)送到遠(yuǎn)程集群。它本身不加入集群,但是它可以將請(qǐng)求轉(zhuǎn)發(fā)到集群中的一個(gè)節(jié)點(diǎn)上。

兩個(gè) Java 客戶端都是通過 9300 端口并使用 Elasticsearch 的原生傳輸協(xié)議和集群交互。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多