国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

這篇具有很好參考價(jià)值的文章主要介紹了分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、Elasticsearch介紹

Elasticsearch介紹

Elasticsearh 是 elastic.co 公司開(kāi)發(fā)的分布式搜索引擎。

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

Elasticsearch(簡(jiǎn)稱ES)是一個(gè)開(kāi)源的分布式、高度可擴(kuò)展的全文搜索和分析引擎。它能夠快速、近乎實(shí)時(shí)的存儲(chǔ)、搜索和分析大量數(shù)據(jù)。適用于包括文本、數(shù)字、地理空間、結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)等在內(nèi)的所有類型數(shù)據(jù)。

它通常為具有復(fù)雜搜索功能的應(yīng)用提供底層搜索技術(shù)。

當(dāng)然,它也可以用來(lái)實(shí)現(xiàn)分布式數(shù)據(jù)存儲(chǔ)、日志統(tǒng)計(jì)、分析、系統(tǒng)監(jiān)控、地理空間查詢等功能。

Elasticsearch 最底層的搜索引擎技術(shù)是 Apache 基金會(huì)開(kāi)源的搜索引擎類庫(kù) Lucene,Lucene 提供了搜索引擎核心 API 。

  • Lucene 地址:https://lucene.apache.org/

ES 在 Lucene 的基礎(chǔ)上提供了分布式支持,可以水平擴(kuò)展,提供了 Restful 這種簡(jiǎn)潔的訪問(wèn)接口,能被任何語(yǔ)言調(diào)用。

  • Elasticsearch 官網(wǎng):https://www.elastic.co/
  • github:https://github.com/elastic/elasticsearch

Elasticsearch能做什么

  • 應(yīng)用搜索,常見(jiàn)的 github 的代碼搜索,滴滴,美團(tuán),點(diǎn)評(píng),銀行等各種搜索
  • 網(wǎng)站搜索
  • 日志記錄和日志分析
  • 基礎(chǔ)設(shè)置指標(biāo)和容器監(jiān)控
  • 應(yīng)用性能監(jiān)控
  • 地理空間數(shù)據(jù)分析和可視化
  • 商業(yè)分析
  • 安全分析

二、ELK 是什么

ELK 是 Elasticsearch、Logstash 和 Kibana 的第一個(gè)字母組合,也叫 ELK Stack。是一套用于數(shù)據(jù)采集、存儲(chǔ)、分析和可視化的開(kāi)源工具集。

  • Elasticsearch:存儲(chǔ)、索引、計(jì)算、搜索、分析數(shù)據(jù)。

  • Logstash:用于收集、轉(zhuǎn)換數(shù)據(jù),然后將它存儲(chǔ)在 ES 中。后面還開(kāi)發(fā)新的收集數(shù)據(jù)軟件 Beats。

  • Beats:它是一個(gè)輕量級(jí)的數(shù)據(jù)采集代理工具,可以向 Elasticsearch 發(fā)送數(shù)據(jù)。

  • Kibana:用于查詢分析、可視化 ES 的數(shù)據(jù),它還可以用于監(jiān)控和報(bào)警的方案。它是 Elasticsearch 基于瀏覽器的分析和搜索儀表盤。

它們之間關(guān)系圖:

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

? (來(lái)自:Elasticsearch 簡(jiǎn)介)

把上面的圖簡(jiǎn)化下:

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

三、ES中的基礎(chǔ)概念

文檔document

Elasticsearch 是面向文檔,它可以存儲(chǔ)整個(gè)對(duì)象或文檔。它不僅僅是存儲(chǔ),還會(huì)索引每個(gè)文檔的內(nèi)容使之可以被搜索。在 ES 中,你可以對(duì)文檔進(jìn)行索引、搜索、排序、過(guò)濾。

在 ES 中,文檔是索引信息的基本單位。

JSON

Elasticsearch 使用 json 格式作為文檔序列化格式。這種格式在 NoSQL 數(shù)據(jù)庫(kù)中使用比較多。

一個(gè) json 對(duì)象是由 key 和 value 組成。key 是字段(field)或?qū)傩裕╬roperty)的名字,值(value)可以是字符串、數(shù)字、布爾類型、另外一個(gè)對(duì)象、值數(shù)組或其他特殊類型,比如表示日期的字符串或表示地理位置的對(duì)象。

在關(guān)系型數(shù)據(jù)庫(kù)中,使用行和列存儲(chǔ)數(shù)據(jù),比如存儲(chǔ)在 MySQL 表中的數(shù)據(jù):

id name
1 比亞迪電動(dòng)車
2 理想電動(dòng)車
3 小鵬電動(dòng)車
4 比亞迪電池
5 理想電池

把上面的數(shù)據(jù)用 json 格式存儲(chǔ)在 elasticsearch 中:

{
    "id": 1,
    "name": "比亞迪電動(dòng)車"
}
{
    "id": 2,
    "name": "理想電動(dòng)車"
}
{
    "id": 3,
    "name": "小鵬電動(dòng)車"
}
{
    "id": 4,
    "name": "比亞迪電池"
}
{
    "id": 5,
    "name": "理想電池"
}

上面 json 中的字段 id 相當(dāng)于 MySQL 數(shù)據(jù)表中列 id。

每個(gè)文檔就是一條json數(shù)據(jù)。一條 json 數(shù)據(jù)相當(dāng)于 MySQL 表中的一行。

索引index

index 索引是具有相似特征文檔的集合。一個(gè)索引通過(guò)名字(必須全部是小寫)來(lái)標(biāo)識(shí),并且在對(duì)其中的文檔執(zhí)行索引、搜索、更新和刪除操作時(shí),都會(huì)用到這個(gè)索引的名字。

索引可以是一個(gè)名詞,相當(dāng)于文檔存儲(chǔ)的地方。

索引也可以是一個(gè)動(dòng)詞,索引一個(gè)文檔表示把一個(gè)文檔存儲(chǔ)到索引里,以便它可以被檢索和查詢。

例如,你有一個(gè)用戶數(shù)據(jù)的索引,索引名稱叫 user,每一份用戶信息就是一個(gè)文檔:

{
    "id": 1,
    "name": "tom",
    "age": 25
},
{
    "id": 2,
    "name": "hanlei",
    "age": 35
},
{
    "id": 1,
    "name": "tom",
    "age": 25
},
{
    "id": 3,
    "name": "hanmeimei",
    "age": 36
}

*類型type

類型 type 這個(gè)概念在 elasticsearch 7.X 已被完全移除(參考文檔 Removal of mapping types)。這里就不作介紹。

映射mapping

映射(mapping)是索引文檔中字段的類型和字段的其它信息,都存儲(chǔ)在映射(mapping)中,它也叫模式定義(schema definition)。

相當(dāng)于 MySQL 數(shù)據(jù)表的 schema,如定義表結(jié)構(gòu)、字段名稱、字段類型等信息。

而在 ES 中,映射可以設(shè)置某個(gè)字段的數(shù)據(jù)類型、默認(rèn)值、分析器、是否被索引等等,其它處理 ES 里面的數(shù)據(jù)使用規(guī)則設(shè)置也叫映射。

mapping還有許多內(nèi)容請(qǐng)查看文檔:https://www.elastic.co/guide/en/elasticsearch/reference/8.4/mapping.html

mapping field doc:https://www.elastic.co/guide/en/elasticsearch/reference/8.4/mapping-fields.html

映射的設(shè)置:

{
    "mappings": {
      "properties": {
        "id": {
          "type": "keyword"
        },
        "message": {
          "type": "text"
        }
      }
    }
}

文檔元數(shù)據(jù)

一個(gè)文檔不僅僅包含 json 數(shù)據(jù),也包含元數(shù)據(jù) - 元數(shù)據(jù)是有關(guān)文檔信息的一些數(shù)據(jù)。

創(chuàng)建映射時(shí),可以自定義其中一些元數(shù)據(jù)字段的行為。例如,創(chuàng)建一個(gè)文檔:

// 先創(chuàng)建一個(gè)映射mapping關(guān)系,相當(dāng)于MySQL中表的schema,定義json文檔中字段的屬性
PUT test
{
    "mappings": {
      "properties": {
        "id": {
          "type": "keyword"
        },
        "message": {
          "type": "text"
        }
      }
    }
}

給文檔寫入一條數(shù)據(jù):

// 給test索引寫入一條json文檔數(shù)據(jù)
PUT test/_doc/1
{
 "id": "12",
 "message": "hello world"
}

上面 PUT test/_doc/1 命令會(huì)返回一條信息:

{
   "_index" : "test",
   "_id" : "1",
   "_version" : 1,
   "result" : "created",
  "_shards" : {
     "total" : 2,
     "successful" : 1,
     "failed" : 0
   },
   "_seq_no" : 0,
   "_primary_term" : 1
}
  • _index:表示文檔所屬的索引
  • _id:文檔唯一標(biāo)識(shí) ID
  • _source:表示文檔 doc 的原生 json 數(shù)據(jù)
  • _size:整個(gè) _source 字段的字節(jié)大小,它是由 mapper-size 插件提供
  • _shards:表示索引的分片數(shù)。一個(gè)索引可以劃分為多個(gè) shards,這樣就可以存儲(chǔ)更多的數(shù)據(jù)

更多元數(shù)據(jù)信息請(qǐng)查看:https://www.elastic.co/guide/en/elasticsearch/reference/8.4/mapping-fields.html

分布式集群

節(jié)點(diǎn)node

一個(gè)節(jié)點(diǎn)node表示集群中的一臺(tái)服務(wù)器,它作為集群的一部分存儲(chǔ)數(shù)據(jù),并參與集群的索引和搜索功能。

節(jié)點(diǎn)由名稱標(biāo)識(shí),默認(rèn)情況下是在啟動(dòng)時(shí)分配給節(jié)點(diǎn)的一個(gè)隨機(jī) UUID 唯一標(biāo)識(shí)符。如果不想要默認(rèn)值,可以自定義節(jié)點(diǎn)名稱。

可以將節(jié)點(diǎn)通過(guò)集群名稱加入特定集群中。默認(rèn)情況下,每個(gè)節(jié)點(diǎn)都加入一個(gè)名為 “elasticsearch” 的集群中,這意味著如果

網(wǎng)絡(luò)上啟動(dòng)了多個(gè)節(jié)點(diǎn),它們可以相互發(fā)現(xiàn),那么它們將自動(dòng)形成一個(gè)名為 elasticsearch 的集群。

在單個(gè)集群中,你可以擁有任意數(shù)量的節(jié)點(diǎn)。

此外,如果網(wǎng)絡(luò)上沒(méi)有其它節(jié)點(diǎn)在運(yùn)行,則會(huì)啟動(dòng)單個(gè)節(jié)點(diǎn)將默認(rèn)形成一個(gè)名為 elasticsearch 的新節(jié)點(diǎn)集群。

集群cluster

集群(cluster)是由一個(gè)或多個(gè)節(jié)點(diǎn)node(服務(wù)器)組成,它們一起保存全部數(shù)據(jù)并提供跨所有節(jié)點(diǎn)的聯(lián)合索引和搜索功能。集群由唯一標(biāo)識(shí)符標(biāo)識(shí),默認(rèn)為“elasticsearch”。這個(gè)名稱很重要,因?yàn)橐粋€(gè)節(jié)點(diǎn)被設(shè)置為通過(guò)名稱加入集群時(shí),該節(jié)點(diǎn)才能成為集群的一部分。

注意:擁有一個(gè)節(jié)點(diǎn)的集群也是完全可以的。

此外,你也可以擁有多個(gè)獨(dú)立的集群,每個(gè)集群都擁有自己獨(dú)立的名稱。

分片shard和副本replica

索引可能會(huì)存儲(chǔ)大量的數(shù)據(jù),而這些數(shù)據(jù)的容量可能會(huì)超過(guò)單個(gè)節(jié)點(diǎn)服務(wù)器的硬件容量限制。比如,占用 1TB 磁盤空間的 10 億文檔的單個(gè)索引可能無(wú)法存儲(chǔ)在單個(gè)節(jié)點(diǎn)的磁盤上,因?yàn)楣?jié)點(diǎn)磁盤容量不足以容納下這么大容量的數(shù)據(jù),或者速度太慢無(wú)法滿足來(lái)自單個(gè)節(jié)點(diǎn)的搜索速度請(qǐng)求。

  • 這些問(wèn)題怎么解決?

Elasticsearch 可以將索引的數(shù)據(jù)進(jìn)行分割,這些分割的部分稱為分片,每個(gè)分片可以分配到不同節(jié)點(diǎn)上。

相當(dāng)于關(guān)系型數(shù)據(jù)中存儲(chǔ)數(shù)據(jù)太多,而進(jìn)行分庫(kù)分表操作,把數(shù)據(jù)進(jìn)行分散存儲(chǔ)。

在 Elasticsearch 中,當(dāng)你創(chuàng)建索引時(shí),你可以定義想要的分片數(shù)量。每個(gè)分片都是一個(gè)功能齊全、獨(dú)立的“索引”,可以在集群的任意節(jié)點(diǎn)上托管。

  • 分片的好處:
  • 它可以對(duì)數(shù)據(jù)進(jìn)行水平拆分,擴(kuò)展存儲(chǔ)數(shù)據(jù)的容量
  • 提供性能、吞吐量,它允許跨分片(可以在多個(gè)節(jié)點(diǎn)上)分布數(shù)據(jù)和并行化操作
  • 如果發(fā)生網(wǎng)絡(luò)故障,數(shù)據(jù)丟了怎么辦?

這時(shí)就會(huì)用到數(shù)據(jù)副本replica功能。Elasticsearch 允許將索引分片構(gòu)造復(fù)制成一個(gè)或多個(gè)副本,即所謂的復(fù)制分片,簡(jiǎn)稱副本。

這樣就提供了 ES 的高可用性,為了高可用,ES 不允許副本分片和主分片(或原始分片)分配在同一節(jié)點(diǎn)上。

集群架構(gòu)圖解

在 ES 中,索引 index 是由多個(gè) json 格式的文檔 document 組成的。每個(gè)索引 index 又可以劃分為多個(gè)分片 Shard。

為了保證高可用,一個(gè)分片 shard,又可以分為主分片(primary shard)和副分片(replica shard),副分片是對(duì)主分片數(shù)據(jù)的備份,每個(gè)主分片可以有多個(gè)副分片,也就是說(shuō)主分片可以有多個(gè)備份數(shù)據(jù),

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

? (每個(gè)索引index由多個(gè)documen組成)

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

? (每個(gè)索引index可以劃分為多個(gè)分片shard,上圖劃分為shard 1,shard 2,shard 3)

集群 cluster 和節(jié)點(diǎn) Node,主分片 Primary 和副分片 Replica 的關(guān)系圖:

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

? (上圖中虛線框里同顏色表示同一份數(shù)據(jù)的不同分片,Primary-主分片,和此主分片的副本(Replica - 副分片))

對(duì)上面集群圖 Cluster 說(shuō)明:

  • 把一個(gè)索引分成 3 個(gè)分片(主分片):Primary 1,Primary 2,Primary 3,然后把 3 個(gè)主分片分配到 3 個(gè)不同節(jié)點(diǎn)Node上
  • 每個(gè)主分片有 2 個(gè)副分片:Replica 1 和 Replica 2,且分別在不同的節(jié)點(diǎn)上。比如主分片 Primary 1 在 Node 1 上,它的副分片Replica 1 和 Replica 2 分別在 Node 2 和 Node 3 上

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

? (上圖:主分片和它所屬副分片,副分片是對(duì)主分片數(shù)據(jù)的備份)

ES與關(guān)系型數(shù)據(jù)庫(kù)對(duì)比

Elasticsearch 與關(guān)系型數(shù)據(jù)庫(kù)的一個(gè)簡(jiǎn)單類比:

Elasticsearch(ES搜索引擎) Relational DB(關(guān)系型數(shù)據(jù)庫(kù))
Indices(多個(gè)索引) Databases(數(shù)據(jù)庫(kù))
Index(單個(gè)索引) Table(表)
Document(文檔) Row(行)
Field(字段) Column(列)

Elasticsearch集群可以包含多個(gè)索引(indices)(數(shù)據(jù)庫(kù)),每一個(gè)索引包含多個(gè)文檔(documents)(行),然后每個(gè)文檔包含多個(gè)字段(Fields)(列)。用于理解 ES 中的概念,作一個(gè)簡(jiǎn)單的類比。

四、數(shù)據(jù)結(jié)構(gòu): 倒排索引

下面介紹 Elasticsearch 中最重要的數(shù)據(jù)結(jié)構(gòu)之一 - 倒排索引。

索引簡(jiǎn)介

索引,在生活中最常見(jiàn)的就是書(shū)籍的目錄,它就是一種類似索引結(jié)構(gòu),有時(shí)我們也叫索引目錄,它能讓人快速找到書(shū)籍相關(guān)章節(jié)的內(nèi)容。

在計(jì)算機(jī)技術(shù)中,索引是一種常用的數(shù)據(jù)結(jié)構(gòu),目的就是加快查找數(shù)據(jù)的速度。比如我們常用的 MySQL 數(shù)據(jù)庫(kù),就有多種索引。

在搜索引擎中,面對(duì)海量的數(shù)據(jù),如何根據(jù)關(guān)鍵字詞快速找到用戶需要的相關(guān)內(nèi)容?

這里就要用到 倒排索引 這種數(shù)據(jù)結(jié)構(gòu),這是搜索引擎中最重要的數(shù)據(jù)結(jié)構(gòu)。

倒排索引

倒排索引中的一些概念:

  • 文檔(document):用來(lái)搜索的數(shù)據(jù),一般是以文本形式存在的存儲(chǔ)對(duì)象。比如一條短信,一封郵件等。更廣義的還有 Word、PDF、XML 等不同格式的文檔。
  • 文檔集合(document collection):由若干個(gè)文檔組成的集合叫文檔集合。
  • 文檔編號(hào)(document id):文檔集合中每個(gè)文檔的唯一編號(hào),用這個(gè)唯一編號(hào)來(lái)標(biāo)識(shí)這個(gè)文檔。
  • 詞條(term):對(duì)文檔數(shù)據(jù),用某種分詞算法后,得到的有含義的詞語(yǔ)就是詞條。例如:我們好好學(xué)習(xí),可以用分詞算法分為:我們,好好學(xué)習(xí),學(xué)習(xí)等幾個(gè)詞條。
  • 倒排索引(inverted index):倒排索引是實(shí)現(xiàn)詞條和文檔的一種存儲(chǔ)形式。通過(guò)倒排索引,可以根據(jù)詞條快速獲取包含這個(gè)詞語(yǔ)的文檔列表。

我們平常使用 MySQL 關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),里面有數(shù)據(jù)表。創(chuàng)建一個(gè)關(guān)于電動(dòng)車的數(shù)據(jù)表:

id name
1 比亞迪電動(dòng)車
2 理想電動(dòng)車
3 小鵬電動(dòng)車
4 比亞迪電池
5 理想電池

怎么把上面的表用倒排索引來(lái)表示呢?

詞條(term) 文檔id(doc id)
比亞迪 1,4
電動(dòng)車 1,2,3
理想 2,5
小鵬 3
電池 4,5
1,2,3

這張表就是倒排索引。

上面 MySQL 中的表,可以看作是正向索引表,然后把這張表數(shù)據(jù)倒過(guò)來(lái),就變成倒排索引表。

MySQL 表變成倒排索引表的處理過(guò)程:

  • 利用分詞算法對(duì)文檔數(shù)據(jù)進(jìn)行分詞,得到一個(gè)一個(gè)詞條。
  • 創(chuàng)建倒排索引表,每行數(shù)據(jù)詞條、文檔id等

倒排索引表的詞條具有唯一性,然后可以給詞條創(chuàng)建索引加快查詢速度,比如哈希表索引。

五、安裝ES

下載并安裝ES

因?yàn)槲业氖莣indows,所以我下載win的安裝包,如果你是其它系統(tǒng)請(qǐng)下載相應(yīng)平臺(tái)的。我這里想下載 V8.4.3 版本,下載地址:

  • https://www.elastic.co/cn/downloads/past-releases/elasticsearch-8-4-3

但是我電腦上安裝的是 JDK 1.8,不適合 8 以上的 ES 版本,見(jiàn)這里說(shuō)明,JDK 和 ES 的對(duì)應(yīng)版本。

后面我換到了能使用jdk 1.8 的 ES V7.17.10 版本。

  • https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-17-10

下載之后直接解壓,然后進(jìn)入 bin 目錄,點(diǎn)擊 elasticsearch.bat 啟動(dòng) ES,啟動(dòng)會(huì)有一些時(shí)間,稍微等一下;

9300 是 tcp 通信端口,ES 集群之間使用 tcp 通信;9200 是 http 協(xié)議端口。

在瀏覽器上輸入 http://localhost:9200/ 查看,我這里輸出以下數(shù)據(jù),安裝成功了,

{
  "name": "AIS",
  "cluster_name": "elasticsearch",
  "cluster_uuid": "bKg5AkWZScafo0vp03XOyA",
  "version": {
    "number": "7.17.10",
    "build_flavor": "default",
    "build_type": "zip",
    "build_hash": "fecd68e3150eda0c307ab9a9d7557f5d5fd71349",
    "build_date": "2023-04-23T05:33:18.138275597Z",
    "build_snapshot": false,
    "lucene_version": "8.11.1",
    "minimum_wire_compatibility_version": "6.8.0",
    "minimum_index_compatibility_version": "6.0.0-beta1"
  },
  "tagline": "You Know, for Search"
}

安裝elasticsearch-head插件

elasticsearch-head 插件可以查看 ES 的各種數(shù)據(jù)。

通過(guò) git clone 下載 head 插件:

git clone https://github.com/mobz/elasticsearch-head.git
cd ./elasticsearch-head
npm install
npm run start

瀏覽器上打開(kāi):http://localhost:9100/

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

當(dāng)然還有其它多種安裝方式。

第二種方式 chrome 插件安裝:

還可以通過(guò) chrome extension 運(yùn)行插件,Elasticsearch Head 在 Chrome store 的 下載地址。

下載 chrome 插件后,安裝到 chrome 瀏覽器里。

第三種方式 docker 安裝:

通過(guò) docker 安裝,具體查看:https://github.com/mobz/elasticsearch-head

設(shè)置跨域:

如果連接不上 ES,需要設(shè)置跨域訪問(wèn),打開(kāi)配置文件 config/elasticsearch.yml,在最后增加下面配置項(xiàng):

http.cors.enabled: true
http.cors.allow-origin: "*"

設(shè)置完成后,重新啟動(dòng) ES。

打開(kāi) http://localhost:9100/,然后點(diǎn)擊連接按鈕,出現(xiàn)下面 green 顏色表示連接成功,如下圖:

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

六、ES操作-增刪改查搜

使用cURL命令操作ES

  • curl 操作命令格式

使用 curl,將請(qǐng)求從命令行提交到本地 Elasticsearch 實(shí)例,這些請(qǐng)求包含任何 HTTP 請(qǐng)求相同部分:

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

命令參數(shù)說(shuō)明:

命令參數(shù) 說(shuō)明
<VERB> HTTP 方法,例如,GET,POST,PUT,HEAD 或 DELETE
<PROTOCOL> http 或 https,如果你在 ES 前面有一個(gè) https 代理
<HOST> Elasticsearch 集群中任何節(jié)點(diǎn)的主機(jī)名。 或用 localhost 來(lái)代表本地機(jī)器上的節(jié)點(diǎn)
<PORT> 運(yùn)行 Elasticsearch HTTP 服務(wù)的端口號(hào),默認(rèn)為 9200
<PATH> API 的終端路徑,可以包含多個(gè)參數(shù),例如,_cluster/stats
<QUERY_STRING> 任何可選的查詢字符串參數(shù)。
<BODY> JSON 編碼格式的請(qǐng)求正文,如果有需要

如果 elasticsearch 啟動(dòng)了安全功能,則必須提供有權(quán)限運(yùn)行 API 的有效用戶名和密碼:

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

// elastic 用戶名
// password 密碼
  • curl 安裝和文檔地址
  • curl 下載地址 https://curl.se/download.html
  • 安裝:https://everything.curl.dev/build
  • https://everything.curl.dev/http http 語(yǔ)法

我是win這里用 chocolatey 安裝:

choro install curl

安裝完成后直接 cd 到它的安裝目錄 C:\ProgramData\chocolatey\bin 目錄下,然后執(zhí)行查看 curl 版本命令,安裝成功:

不知道安裝到哪里了?可以使用 where curl 命令來(lái)查詢安裝位置

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

查詢 ES 的 http 服務(wù)端口 9200,命令:curl.exe -XGET 'http://localhost:9200' -H 'Content-Type: application/json'

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

這里還可以使用 Go 語(yǔ)言實(shí)現(xiàn)的 curl 工具 curlie 來(lái)操作 ES。

  • 安裝 curlie
go install github.com/rs/curlie@v1.6.0

用 curlie 在 terminal 上訪問(wèn) HTTP 端口 9200,我是 win 使用 PowerShell,命令如下:

curlie -XGET 'http://localhost:9200' -H 'Content-Type: application/json'

返回結(jié)果:

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

如果 ES 設(shè)置了用戶和密碼,可以用如下命令:

$ curlie -XGET -u "elastic:pwdes" 'http://localhost:9200/' -H 'Content-Type: application/json'

說(shuō)明:如果運(yùn)行 curlie 返回安全錯(cuò)誤信息,那么找到ES安裝位置,然后在 config/elasticsearch.yml 文件最后面加上

xpack.security.enabled: false ,把安全驗(yàn)證設(shè)置為 false。

創(chuàng)建索引和文檔

前面說(shuō)了,索引 index 可以是名詞存儲(chǔ)文檔的地方,也可以是動(dòng)詞創(chuàng)建索引的意思。

創(chuàng)建索引基本語(yǔ)法:

PUT /{索引名稱}

創(chuàng)建索引和文檔基本語(yǔ)法:

PUT /{索引名稱}/_doc/文檔id

// 也可以把上面 PUT 換成 POST 

查詢索引信息:

GET /{索引名稱}
  • curl創(chuàng)建索引和文檔:

例如,創(chuàng)建一個(gè)賣書(shū)的書(shū)店bookmall索引,然后給索引增加一些數(shù)據(jù),命令如下:

curl -XPUT "http://localhost:9200/bookmall/_doc/1?pretty" -H "Content-Type: application/json" -d '{"product_id": 123456, "quantity": 100}'

我的是windows,在cmd下運(yùn)行后出錯(cuò),出錯(cuò)信息如下:

{
  "error" : {
    "root_cause" : [
      {
        "type" : "mapper_parsing_exception",
        "reason" : "failed to parse"
      }
    ],
    "type" : "mapper_parsing_exception",
    "reason" : "failed to parse",
    "caused_by" : {
      "type" : "json_parse_exception",
      "reason" : "Unexpected character ('p' (code 112)): was expecting double-quote to start field name\n at [Source: (ByteArrayInputStream); line: 1, column: 3]"
    }
  },
  "status" : 400
}

需要把上面的命令修改下,雙引號(hào)前加上斜線,

curl -XPUT 'http://localhost:9200/bookmall/_doc/1?pretty' -H 'Content-Type: application/json' -d '{\"product_id\": 123456, \"quantity\": 100}'

在運(yùn)行,成功了,返回信息:

{
  "_index" : "bookmall",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

在 linux 下就不需要加這條斜線,所以學(xué)習(xí)建議在 linux 平臺(tái)下。 - -!

上面的命令 curl -XPUT 也可以換成 curl -XPOST

  • Postman 創(chuàng)建索引

例如,博客巴士的博客文章,我們可以用 ES 來(lái)索引這些博客文章信息。

下面我使用 Postman 這款測(cè)試 API 的軟件來(lái)增加索引,打開(kāi) Postman 軟件(如沒(méi)安裝請(qǐng)先安裝),首先新建一個(gè)請(qǐng)求的 tab,

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

然后在 Headers 里加上 Content-Type: application/json ,如下:

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

然后請(qǐng)求方法選擇 PUT, url 欄里填上 http://localhost:9200/blogerbus/_doc/1?pretty ,然后點(diǎn)擊 body,選擇 raw 選項(xiàng),格式選擇 JSON , 填上 json 格式的數(shù)據(jù),最后點(diǎn)擊 Send 按鈕發(fā)送數(shù)據(jù),如下圖:

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

Status:201 Created ,成功返回?cái)?shù)據(jù):

{
    "_index": "blogerbus",
    "_type": "_doc",
    "_id": "1",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 1
}

對(duì)這條 URL http://localhost:9200/blogerbus/_doc/1?pretty 的說(shuō)明:

  • http://localhost:9200:ES HTTP 本地服務(wù)端地址:端口號(hào)

  • blogerbus:索引名稱

  • _doc:文檔終端endpoint,ES 里的一個(gè)固定字段

  • 1:文檔 id

  • ?pretty:將返回的json格式化數(shù)據(jù),顯示為更易于讓人閱讀的形式

查詢索引index文檔

基本語(yǔ)法:

// 根據(jù)單個(gè)id查詢
GET /{索引名稱}/_doc/文檔id

//批量查詢:查詢?cè)撍饕龓?kù)下的全部文檔 
GET /{索引名稱}/_search

// 查詢某個(gè)索引詳細(xì)信息
GET /{索引名稱}

// 查詢所有索引部分信息
GET /_cat/indices
  • Postman 查詢

用 Postman 來(lái)查詢索引文檔,在url欄輸入 http://localhost:9200/blogerbus/_doc/1?pretty=true,點(diǎn)擊 Send,返回:

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

返回內(nèi)容:

{
    "_index": "blogerbus",
    "_type": "_doc",
    "_id": "1",
    "_version": 1,
    "_seq_no": 0,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "user": "lilei",
        "create_at": "2021-09-15T08:12:43",
        "title": "hello world",
        "article": "hello world, this is good thing"
    }
}
  • curl查詢索引信息
// 查詢單個(gè)索引詳細(xì)信息
curl -XGET 'http://localhost:9200/bookmall?pretty' -H 'Content-Type:application/json'

// 查詢 ES 中的所有索引部分信息
curl -XGET 'http://localhost:9200/_cat/indices?pretty' -H 'Content-Type:application/json'

搜索

基本語(yǔ)法:

GET /{索引名稱}/_search  // 后面可以跟一些查詢字符串,也可以跟json的DSL

給索引 blogerbus 多增加幾個(gè)文檔,用于我們的搜索:

// 第2篇文檔,http://localhost:9200/blogerbus/_doc/2?pretty
{
    "user": "lilei", 
    "create_at": "2021-09-18T09:12:04", 
    "title": "math lesson",
    "article": "hello math, this my first lesson"
}

// 第3篇文檔,http://localhost:9200/blogerbus/_doc/3?pretty
{
    "user": "hanmeimei", 
    "create_at": "2021-10-10T03:24:34", 
    "title": "test lesson",
    "article": "hello lesson, this my test lesson"
}
  • Postman 搜索

搜索 user 為 lilei 的所有文章,在 Postman 的url欄輸入:http://localhost:9200/blogerbus/_search?q=user:lilei&pretty=true,點(diǎn)擊 Send 按鈕,返回值:

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

上面是直接在 url 上用字符串查詢,還可以用 json 格式來(lái)查詢:

{
    "query" : {
        "match" : { "user": "lilei" }
    }
}

url 修改為 http://localhost:9200/blogerbus/_search?pretty=true,

分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

返回的數(shù)據(jù)與上面相同。

  • curl 搜索
curl -XGET 'http://localhost:9200/blogerbus/_search?pretty=true' -H 'Content-Type: application/json' -d '{\"query\": {\"match\":{\"user\": \"lilei\"}}}'

返回的內(nèi)容與 Postman 搜索返回內(nèi)容相同

刪除

刪除文檔基本語(yǔ)法:

DELETE /{索引名稱}/_doc/文檔id

例如,curl 刪除一篇 id 為 2 的文檔:

curl -XDELETE 'http://localhost:9200/bookmall/_doc/2'

返回:

{"_index":"bookmall","_type":"_doc","_id":"2","_version":3,"result":"deleted","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":3,"_primary_term":1}

后面沒(méi)有加?pretty=true,所以返回?cái)?shù)據(jù)排版是不易讀的json。

刪除索引基本語(yǔ)法:

DELETE /{索引名稱}

修改

修改有2種方式:全量修改和增量修改

  • 全量修改:直接覆蓋原來(lái)的文檔。根據(jù)指定 id 刪除,id 不存在時(shí),修改變成新增。

基本語(yǔ)法:

PUT /{索引名稱}/_doc/文檔id
{
    "字段1": "值1",
    "字段2": "值2",
    // ... 略
}
  • 增量修改:修改文檔中部分字段,只修改指定 id 中匹配文檔的部分字段。

基本語(yǔ)法:

POST /{索引名稱}/_update/文檔id
{
    "doc": {
         "字段名": "新值",
    }
}

curl 全量修改:

把上面的 bookmall/_doc/1 中 2 個(gè)字段值都修改下:

curl -XPUT "http://localhost:9200/bookmall/_doc/1?pretty" -H "Content-Type: application/json" -d '{\"product_id\": 1234567, \"quantity\": 1000}'

修改成功后返回?cái)?shù)據(jù):

{
  "_index" : "bookmall",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 4,
  "_primary_term" : 1
}

那能不能修改值的同時(shí)新增一個(gè)字段?可以的。例如,給文檔 id 為 1 的新增一個(gè)字段 num:50 ,修改 quantity 為 2000,如下:

curl -XPUT "http://localhost:9200/bookmall/_doc/1?pretty" -H "Content-Type: application/json" -d '{\"product_id\": 123456, \"quantity\": 2000,\"name\":\"shiije\",\"num\":50}'

可以修改成功。

curl 部分修改:

修改文檔 id 為 1 中的字段 product_id 為 123,

curl -XPOST "http://localhost:9200/bookmall/_update/1?pretty" -H "Content-Type: application/json" -d '{\"doc\":{\"product_id\": 123}}'

可以修改成功。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-437898.html

七、參考

  • https://lucene.apache.org/ lucene
  • https://www.elastic.co/guide/en/elasticsearch/reference/8.4/elasticsearch-intro.html ES 文檔
  • https://github.com/elastic/elasticsearch/tree/8.4/docs/reference
  • https://www.elastic.co/guide/en/elasticsearch/plugins/8.4/mapper-size.html
  • https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docs-index_.html
  • https://github.com/elastic elastic github
  • https://github.com/elastic/kibana
  • 《elasticsearch權(quán)威指南》
  • https://elasticstack.blog.csdn.net/article/details/98871531 Elasticsearch 簡(jiǎn)介
  • https://www.elastic.co/cn/support/matrix#matrix_jvm
  • https://www.elastic.co/guide/en/elasticsearch/reference/8.4/modules-node.html
  • https://everything.curl.dev/http curl http 語(yǔ)法
  • https://www.postman.com/ postman

到了這里,關(guān)于分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 分布式搜索引擎-elasticsearch基礎(chǔ)

    分布式搜索引擎-elasticsearch基礎(chǔ)

    elasticsearch是一款非常強(qiáng)大的開(kāi)源搜索引擎,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容。 elasticsearch結(jié)合kibana、Logstash、Beats,也就是elastic stack(ELK)。被廣泛應(yīng)用在 日志數(shù)據(jù)分析 、 實(shí)時(shí)監(jiān)控 等領(lǐng)域。 elasticsearch是elastic stack的核心,負(fù)責(zé)存儲(chǔ)、搜索、分析數(shù)據(jù)。 Lucen

    2024年03月20日
    瀏覽(30)
  • # 分布式搜索引擎-- elasticsearch基礎(chǔ)

    # 分布式搜索引擎-- elasticsearch基礎(chǔ)

    elasticsearch是一款非常強(qiáng)大的開(kāi)源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容,,可以用來(lái)實(shí)現(xiàn)搜索、日志統(tǒng)計(jì)、分析、系統(tǒng)監(jiān)控等功能 ? ?是以elasticsearch為核心的技術(shù)棧,都包括: ElasticSearch(存儲(chǔ),計(jì)算,搜索數(shù)據(jù)) kibana(數(shù)據(jù)可視化) Logstas

    2024年03月27日
    瀏覽(31)
  • Elasticsearch 分布式搜索引擎 速學(xué)

    Elasticsearch 分布式搜索引擎 速學(xué)

    ????????elasticsearch是一款非常強(qiáng)大的開(kāi)源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容,它結(jié)合kibana、Logstash、Beats,也就是elastic stack(ELK)。它被廣泛應(yīng)用在日志數(shù)據(jù)分析、實(shí)時(shí)監(jiān)控等領(lǐng)域,而elasticsearch是elastic stack的核心,負(fù)責(zé)存儲(chǔ)

    2024年02月03日
    瀏覽(18)
  • 分布式搜索引擎elasticsearch(一)

    分布式搜索引擎elasticsearch(一)

    elasticsearch是一款非常強(qiáng)大的開(kāi)源搜索引擎,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容。 elasticsearch是elastic stack的核心,負(fù)責(zé)存儲(chǔ)、搜索、分析數(shù)據(jù)。 文檔(document):每條數(shù)據(jù)就是一個(gè)文檔 詞條(term):文檔按照語(yǔ)義分成的詞語(yǔ) 倒排索引中包含兩部分內(nèi)容: 詞條詞

    2024年02月02日
    瀏覽(30)
  • 分布式搜索引擎ElasticSearch——基礎(chǔ)

    分布式搜索引擎ElasticSearch——基礎(chǔ)

    什么是elasticsearch elasticsearch的發(fā)展 https://lucene.apache.org/ https://www.elastic.co/cn/ 正向索引和倒排索引 安裝elasticsearch,kibana https://github.com/medcl/elasticsearch-analysis-ik 部署單點(diǎn)es 創(chuàng)建網(wǎng)絡(luò) 因?yàn)槲覀冞€需要部署kibana容器,因此需要讓es和kibana容器互聯(lián)。這里先創(chuàng)建一個(gè)網(wǎng)絡(luò): 加載鏡像

    2024年01月17日
    瀏覽(34)
  • 分布式搜索引擎ElasticSearch——深入elasticSearch

    分布式搜索引擎ElasticSearch——深入elasticSearch

    聚合的分類 DSL實(shí)現(xiàn)Bucket聚合 DSL實(shí)現(xiàn)Metric聚合 RestAPI實(shí)現(xiàn)聚合 https://github.com/medcl/elasticsearch-analysis-pinyin DSL實(shí)現(xiàn)自動(dòng)補(bǔ)全查詢 Completion Suggester 修改酒店索引庫(kù)數(shù)據(jù)結(jié)構(gòu) RestAPI實(shí)現(xiàn)自動(dòng)補(bǔ)全查詢 實(shí)現(xiàn)酒店搜索頁(yè)面輸入框的自動(dòng)補(bǔ)全 數(shù)據(jù)同步思路分析 利用MQ實(shí)現(xiàn)mysql與elasticsearch數(shù)

    2024年01月17日
    瀏覽(55)
  • Elasticsearch 分布式全文搜索引擎原理解析

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) Elasticsearch是一個(gè)開(kāi)源的分布式全文搜索引擎,它可以近實(shí)時(shí)地存儲(chǔ)、檢索數(shù)據(jù)。本系列文章將從以下幾個(gè)方面對(duì)Elasticsearch進(jìn)行深入分析: Elasticsearch的主要組成部分 索引、類型和映射(Mapping) 搜索請(qǐng)求處理流程 查詢緩存機(jī)制 Elasticsearch集群

    2024年02月05日
    瀏覽(31)
  • 微服務(wù)---分布式搜索引擎 elasticsearch基礎(chǔ)

    微服務(wù)---分布式搜索引擎 elasticsearch基礎(chǔ)

    1.1.1.elasticsearch的作用 elasticsearch是一款非常強(qiáng)大的開(kāi)源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容 例如: 在GitHub搜索代碼 在電商網(wǎng)站搜索商品 在百度搜索答案 在打車軟件搜索附近的車 1.1.2.ELK技術(shù)棧 elasticsearch結(jié)合kibana、Logstash、Beats,

    2024年02月04日
    瀏覽(30)
  • 分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

    分布式搜索引擎Elasticsearch基礎(chǔ)入門學(xué)習(xí)

    Elasticsearh 是 elastic.co 公司開(kāi)發(fā)的分布式搜索引擎。 Elasticsearch(簡(jiǎn)稱ES)是一個(gè)開(kāi)源的分布式、高度可擴(kuò)展的全文搜索和分析引擎。它能夠快速、近乎實(shí)時(shí)的存儲(chǔ)、搜索和分析大量數(shù)據(jù)。適用于包括文本、數(shù)字、地理空間、結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)等在內(nèi)的所有類型數(shù)據(jù)。 它通

    2024年02月03日
    瀏覽(37)
  • ElasticSearch分布式搜索引擎(兩萬(wàn)字詳解)

    ElasticSearch分布式搜索引擎(兩萬(wàn)字詳解)

    elasticsearch是一款非常強(qiáng)大的開(kāi)源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容 elasticsearch結(jié)合kibana、Logstash、Beats,也就是elastic stack(ELK)。被廣泛應(yīng)用在日志數(shù)據(jù)分析、實(shí)時(shí)監(jiān)控等領(lǐng)域: 而elasticsearch是elastic stack的核心,負(fù)責(zé)存儲(chǔ)、搜索

    2024年01月25日
    瀏覽(54)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包