1. 程式人生 > 程式設計 >Elasticsearch 7.x 之檔案、索引和 REST API 【基礎入門篇】

Elasticsearch 7.x 之檔案、索引和 REST API 【基礎入門篇】

前幾天寫過一篇《Elasticsearch 7.x 最詳細安裝及配置》,今天繼續最新版基礎入門內容。這一篇簡單總結了 Elasticsearch 7.x 之檔案、索引和 REST API。

  • 什麼是檔案
  • 檔案Unique ID
  • 檔案元資料
  • 什麼是索引
  • REST API

一、索引檔案(Document)

1.1 白話什麼是檔案

從使用案例出發,Elasticsearch 是面向檔案,檔案是所有搜尋資料的最小單元。

  • 案例一:每個公司都有業務日誌平臺,比如交易業務日誌。
    檔案:每一條日誌檔案中的日誌項,就是檔案
  • 案例二:可以搜尋並播放電影的線上視訊網站
    檔案:每一個電影的具體資訊,就是檔案
  • 案例三:可以搜尋並下載檔案的雲端儲存網站,類似百度雲
    檔案:每一個檔案具體內容資訊,就是檔案

等等案例很多,那麼檔案就是類似資料庫裡面的一條長長的儲存記錄。檔案(Document)是索引資訊的基本單位。

檔案被序列化成為 JSON 格式,物理儲存在一個索引中。JSON 是一種常見的網際網路資料交換格式:

  • 檔案欄位名:JSON 格式由 name/value pairs 組成,對應的 name 就是檔案欄位名
  • 檔案欄位型別:每個欄位都有對應的欄位型別:String、integer、long 等,並支援資料&巢狀

1.2 檔案的 Unique ID

file

每個檔案都會有一個 Unique ID,其欄位名稱為 _id

  • 自行設定指定 ID 或通過 Elasticsearch 自動生成
  • 其值不會被索引
  • 注意:該 id 欄位的值可以在某些查詢 term,terms,match,querystring,simplequerystring 等中訪問,但不能在 aggregations,scripts 或 sorting 中使用。如果需要對 id 欄位進行排序或彙總,建議新建一個檔案欄位複製 id 欄位的內容
PUT my_index/_doc/1
{
  "text": "Document with ID 1"
}

PUT my_index/_doc/2&refresh=true
{
  "text": "Document with ID 2"
}

GET my_index/_search
{
  "query": {
    "terms": {
      "_id": [ "1","2" ] 
    }
  }
}複製程式碼

1.3 檔案元資料

file

元資料是用於標註檔案的相關資訊,那麼索引檔案的元資料如下:

  • _index 檔案所屬索引名稱
  • _type 檔案所屬型別名
  • _id 檔案唯一 ID
  • _score 檔案相關性打分
  • _source 檔案 JSON 資料
  • _version 檔案版本資訊

其中 _type 檔案所屬型別名,需要關注版本不同之間區別:

  • 7.0 之前,一個索引可以設定多個 types
  • 7.0 開始,被 Deprecated 了。一個索引只能建立一個 type,值為 _doc

二、索引(Index)

2.1 索引不同意思

作為名詞,索引代表是在 Elasticsearch 叢集中,可以建立很多不同索引。也是本小節要總結的內容。

作為動詞,索引代表儲存一個檔案到 Elasticsearch。就是在 Elasticsearch 建立一個倒排索引的意思

2.2 什麼是索引

索引,就是相似型別檔案的集合。類似 Spring Bean 容器裝載著很多 Bean ,ES 索引就是檔案的容器,是一類檔案的集合。

以前匯入了 kibanasampledata_flights 索引,通過 GET 下面這個 URL ,就能得到索引一些資訊:

GET http://localhost:9200/kibana_sample_data_flights複製程式碼

結果如下:

{
    "kibana_sample_data_flights": {
        "aliases": {},"mappings": {
            "properties": {
                "AvgTicketPrice": {
                    "type": "float"
                },"Cancelled": {
                    "type": "boolean"
                },"Carrier": {
                    "type": "keyword"
                },"DestLocation": {
                    "type": "geo_point"
                },"FlightDelay": {
                    "type": "boolean"
                },"FlightDelayMin": {
                    "type": "integer"
                },"timestamp": {
                    "type": "date"
                }
            }
        },"settings": {
            "index": {
                "number_of_shards": "1","auto_expand_replicas": "0-1","blocks": {
                    "read_only_allow_delete": "true"
                },"provided_name": "kibana_sample_data_flights","creation_date": "1566271868125","number_of_replicas": "0","uuid": "SfR20UNiSLKJWIpR1bcrzQ","version": {
                    "created": "7020199"
                }
            }
        }
    }
}複製程式碼

根據返回結果,我們知道:

  • mappings:定義檔案欄位的型別
  • settings:定義不同資料分佈
  • aliases:定義索引的別名,可以通過別名訪問該索引

索引,是邏輯空間概念,每個索引有對那個的 Mapping 定義,對應的就是檔案的欄位名和欄位型別。相比後面會講到分片,是物理空間概念,索引中儲存資料會分散到分片上。

實戰經驗總結:aliases 別名大有作為,比如 myindex 遷移到 myindex_new,資料遷移後,只需要保持一致的別名配置。那麼通過別名訪問索引的業務方都不需要修改,直接遷移即可。

2.3 跟 MySQL 類比

基本理解了 Elasticsearch 重要的兩個概念,可以將 ES 關鍵點跟關係型資料庫類比如下:

file

三、REST API 方便 ES 被各種語言呼叫

file

如圖,Elasticsearch 提供了 REST API,方便,相關索引 API 如下:

# 檢視索引相關資訊
GET kibana_sample_data_ecommerce

# 檢視索引的檔案總數
GET kibana_sample_data_ecommerce/_count

# 檢視前10條檔案,瞭解檔案格式
POST kibana_sample_data_ecommerce/_search
{
}

# _cat indices API
# 檢視indices
GET /_cat/indices/kibana*?v&s=index

# 檢視狀態為綠的索引
GET /_cat/indices?v&health=green

# 按照檔案個數排序
GET /_cat/indices?v&s=docs.count:desc

# 檢視具體的欄位
GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt

# How much memory is used per index?
GET /_cat/indices?v&h=i,tm&s=tm:desc複製程式碼

具體 API 可以通過 POSTMan 等工具操作,或者安裝 kibana ,對應的 Dev Tools工具進行訪問。

(完),更多可以看 ES 7.x 系列教程 bysocket.com

資料:

  • Elasticsearch 7.x 最詳細安裝及配置
    https://www.bysocket.com/elasticsearch/2417.html
  • 極客時間 Elasticsearch核心技術與實戰
  • CAT Index API https://www.elastic.co/guide/en/elasticsearch/reference/7.1/cat-indices.html
  • 為什麼不再支援單個Index下,多個Tyeps https://www.elastic.co/cn/blog/moving-from-types-to-typeless-apis-in-elasticsearch-7-0

本文由部落格一文多發平臺 OpenWrite 釋出!