日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ElasticSearch之HTTP索引操作和文档操作

發(fā)布時間:2023/12/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch之HTTP索引操作和文档操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1. 核心概念及數據格式
    • 1.1 索引( Index)
    • 1.2 類型( Type)
    • 1.3 文檔( Document)
    • 1.4 字段( Field)
    • 1.5 映射( Mapping)
    • 1.6 分片( Shards)
    • 1.7 副本( Replicas)
    • 1.8 分配( Allocation)
    • 1.9 數據格式
  • 2. HTTP操作
    • 2.1 索引操作
      • 2.1.1 創(chuàng)建索引
      • 2.1.2 查看所有索引
      • 2.1.3 查看單個索引
      • 2.1.4 刪除索引
    • 2.2 文檔操作
      • 2.2.1 創(chuàng)建文檔
      • 2.2.2 查看文檔
      • 2.2.3 修改文檔
      • 2.2.4 修改字段
      • 2.2.5 刪除文檔
      • 2.2.6 條件刪除文檔
      • 2.2.7 查詢文檔中所有數據

1. 核心概念及數據格式

1.1 索引( Index)

一個索引就是一個擁有相似特征的文檔的集合。

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

能搜索的數據必須索引,好處是可以提高查詢速度。

1.2 類型( Type)

在一個索引中,可以定義一種或多種類型。一個類型是索引的一個邏輯上的分類/分區(qū)。通常,會為具有一組共同字段的文檔定義一個類型。ES不同的版本,類型發(fā)生了不同的變化。

版本Type
5.x支持多種type
6.x只能有一種type
7.x默認不再支持自定義索引類型(默認類型為:_doc)

1.3 文檔( Document)

一個文檔是一個可被索引的基礎信息單元,也就是一條數據。

文檔以JSON格式來表示。在一個index/type里面,可以存儲任意多的文檔。

1.4 字段( Field)

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

1.5 映射( Mapping)

mapping是對處理數據的方式和規(guī)則做一些限制,如:某個字段的數據類型、默認值、分析器、是否被索引等。

1.6 分片( Shards)

一個索引可以存儲超出單個節(jié)點硬件限制的大量數據。

比如,一個具有10億文檔數據的索引占據1TB的磁盤空間,而任一節(jié)點都可能沒有這樣大的磁盤空間。或者單個節(jié)點處理搜索請求,響應太慢。為了解決這個問題,Elasticsearch提供了將索引劃分成多份的能力,每一份就稱之為分片。在創(chuàng)建一個索引時,可以指定想要的分片數量。每個分片本身也是一個功能完善并且獨立的“索引“,這個“索引”可以被放置到集群中的任何節(jié)點上。

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

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

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

一個 Elasticsearch索引是分片的集合。當 Elasticsearch在索引中搜索的時候,會發(fā)送查詢到每一個屬于索引的分片,然后合并每個分片的結果到一個全局的結果集。

1.7 副本( Replicas)

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

復制分片之所以重要,有兩個主要原因:

  • 在分片/節(jié)點失敗的情況下,提供了高可用性。因為這個原因,注意到復制分片從不與原/主要(original/primary)分片置于同一節(jié)點上是非常重要的。
  • 擴展搜索量/吞吐量,因為搜索可以在所有的副本上并行運行。

每個索引可以被分成多個分片。一個索引也可以被復制0次(意思是沒有復制)或多次。一旦復制了,每個索引就有了主分片(作為復制源的原來的分片)和復制分片(主分片的拷貝)之別。

分片和復制的數量可以在索引創(chuàng)建時指定。在索引創(chuàng)建之后,可以在任何時候動態(tài)地改變復制的數量,但是事后不能改變分片的數量。

默認情況下,Elasticsearch中的每個索引被分片1個主分片和1個復制,這意味著,如果集群中至少有兩個節(jié)點,索引將會有1個主分片和另外1個復制分片(1個完全拷貝),這樣的話每個索引總共就有2個分片,需要根據索引需要確定分片個數。

1.8 分配( Allocation)

將分片分配給某個節(jié)點的過程,包括分配主分片或者副本。如果是副本,還包含從主分片復制數據的過程。這個過程是由master節(jié)點完成的。

1.9 數據格式

Elasticsearch是面向文檔型數據庫,一條數據在ElasticSearch中就是一個文檔,為了方便理解,可以將 Elasticsearch里存儲文檔數據和關系型數據庫MySQL存儲數據的概念進行一個類比。

Elasticsearch里的 Index可以看做一個庫,而Types相當于表, Documents則相當于表的行。這里Types的概念已經被逐漸弱化, Elasticsearch 6.X中,一個 index下已經只能包含一個type,Elasticsearch 7.X 中 , Type的概念已經被刪除了。

2. HTTP操作

2.1 索引操作

對比關系型數據庫,索引就等同于數據庫

2.1.1 創(chuàng)建索引

在Postman 中,向 ES服務器發(fā) PUT請求: http://127.0.0.1:9200/scorpios

{"acknowledged": true, # 響應結果"shards_acknowledged": true, # 分片結果"index": "scorpios" # 索引名稱 }

注意:創(chuàng)建索引庫的分片數默認 1 片,在 7.0.0 之前的 Elasticsearch 版本中,默認 5 片

如果重復添加索引,會返回錯誤信息,put操作具有冪等性,每次操作都必須返回同一結果

2.1.2 查看所有索引

在Postman中,向 ES服務器發(fā) GET請求:http://127.0.0.1:9200/_cat/indices?v

這里請求路徑中的_cat表示查看的意思, indices表示索引,所以整體含義就是查看當前ES服務器中的所有索引,就好像MySQL中的show tables的感覺

表頭含義
health當前服務器健康狀態(tài):green(集群完整)、yellow(單點正常、集群不完整)、red(單點不正常)
status索引打開、關閉狀態(tài)
index索引名
uuid索引統一編號
pri主分片數量
rep副本數量
docs.count可用文檔數量
docs.deleted文檔刪除狀態(tài)(邏輯刪除)
store.size主分片和副分片整體占空間大小
pri.store.size主分片占空間大小

2.1.3 查看單個索引

在Postman中,向 ES服務器發(fā) GET請求:http://127.0.0.1:9200/scorpios

{"scorpios": { # 索引名"aliases": {}, # 別名"mappings": {}, #映射"settings": { #設置"index": { #設置-索引"creation_date": "1650005523048", # 設置-索引-創(chuàng)建時間"number_of_shards": "1", # 設置-索引-主分片數量"number_of_replicas": "1", # 設置-索引-副分片數量"uuid": "FbPQEU9zRJajekqOLlcaeg", # 設置-索引-唯一標識"version": { # 設置-索引-版本"created": "7080099"},"provided_name": "scorpios" # 設置-索引-名稱}}} }

查看索引向ES服務器發(fā)送的請求路徑和創(chuàng)建索引是一致的,但是 HTTP方法不一致。

2.1.4 刪除索引

在Postman中,向 ES 服務器發(fā) DELETE請求:http://127.0.0.1:9200/scorpios

再次訪問索引時,服務器返回響應:索引不存在

2.2 文檔操作

對比關系型數據庫,文檔就等同于行

2.2.1 創(chuàng)建文檔

索引已經創(chuàng)建好了,接下來創(chuàng)建文檔,并添加數據。這里的文檔可以類比為關系型數據庫中的表數據,添加的數據格式為 JSON格式。

在Postman中,向 ES服務器發(fā) POST請求:http://127.0.0.1:9200/scorpios/_doc

此處如果索引沒有創(chuàng)建,直接創(chuàng)建文檔,也是可以的,會默認把索引也創(chuàng)建好

{"_index": "scorpios", # 索引"_type": "_doc", # 類型-文檔"_id": "htwoLIABBD3yd3QiLrm3", # 唯一標識,可以類比為mysql中的主鍵,隨機生成"_version": 1, # 版本"result": "created", # 結果,created表示創(chuàng)建成功"_shards": { # 分片"total": 2, # 分片-總數"successful": 1, # 分片-成功"failed": 0 # 分片-失敗},"_seq_no": 4,"_primary_term": 1 }

此處發(fā)送請求的方式必須為POST,不能是 PUT,否則會發(fā)生錯誤。

此處需要注意:如果增加數據時明確數據主鍵,那么請求方式也可以為PUT。

只需要記住put操作具有冪等性。

上面的數據創(chuàng)建后,由于沒有指定數據唯一性標識(ID),默認情況下 ES服務器會隨機生成一個 。如果想要自定義唯一性標識,需要在創(chuàng)建時指定:http://127.0.0.1:9200/scorpios/_doc/1

2.2.2 查看文檔

查看文檔時,需要指明文檔的唯一性標識,類似于MySQL中數據的主鍵查詢
在Postman中,向 ES服務器發(fā) GET請求:http://127.0.0.1:9200/scorpios/_doc/1

{"_index": "scorpios", # 索引"_type": "_doc", # 文檔類型"_id": "1","_version": 1,"_seq_no": 5,"_primary_term": 1,"found": true, # 查詢結果,true表示查找到,false表示未查找到"_source": { # 文檔源信息"title": "小米手機","category": "小米","images": "http://www.xiaomi.com/xm.jpg","price": 3999.00} }

2.2.3 修改文檔

和新增文檔一樣,輸入相同的URL 地址請求,如果請求體變化,會將原有的數據內容覆蓋

在Postman中,向 ES服 務器發(fā) POST請求:http://127.0.0.1:9200/scorpios/_doc/1

{"_index": "scorpios","_type": "_doc","_id": "1","_version": 2, # 版本"result": "updated", # 結果 updated表示數據被更新"_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 2,"_primary_term": 1 }

2.2.4 修改字段

修改數據時,也可以只修改某一給條數據的局部信息

在Postman中,向 ES服務器發(fā) POST請求:http://127.0.0.1:9200/scorpios/_update/1

然后再根據唯一性標識,查詢文檔數據,文檔數據已經更新

2.2.5 刪除文檔

刪除一個文檔不會立即從磁盤上移除,它只是被標記成已刪除(邏輯刪除)。
在Postman中,向 ES服務器發(fā) DELETE請求:http://127.0.0.1:9200/scorpios/_doc/1

{"_index": "scorpios","_type": "_doc","_id": "1","_version": 3, # 版本,對數據的操作,都會更新版本"result": "deleted", # 結果,deleted表示數據被標記為刪除"_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 3,"_primary_term": 1 }

2.2.6 條件刪除文檔

一般刪除數據都是根據文檔的唯一性標識進行刪除,實際操作時,也可以根據條件對多條數據進行刪除,首先分別增加多條數據。

向ES服務器發(fā) POST請求:http://127.0.0.1:9200/scorpios/_delete_by_query

{"took": 141, # 耗時"timed_out": false, # 是否超時"total": 1, # 總數"deleted": 1, # 刪除數量"batches": 1,"version_conflicts": 0,"noops": 0,"retries": {"bulk": 0,"search": 0},"throttled_millis": 0,"requests_per_second": -1.0,"throttled_until_millis": 0,"failures": [] }

注意:條件刪除是發(fā)Post請求

2.2.7 查詢文檔中所有數據

在Postman中,向 ES服務器發(fā) GET請求:http://127.0.0.1:9200/scorpios/_search。此方式只能查詢出10條數據

可以在上面請求中加入查詢參數來查詢所有數據。

總結

以上是生活随笔為你收集整理的ElasticSearch之HTTP索引操作和文档操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。