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

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

  • 什麼是文檔
  • 文檔Unique ID
  • 文檔元數據
  • 什麼是索引
  • REST API

1、索引文檔(Document)

1.1 白話什麼是文檔

從使用案例出發,Elasticsearch 是面向文檔,文檔是全部搜索數據的最小單元。數據庫

  • 案例一:每一個公司都有業務日誌平臺,好比交易業務日誌。 文檔:每一條日誌文件中的日誌項,就是文檔api

  • 案例二:能夠搜索並播放電影的在線視頻網站 文檔:每個電影的具體信息,就是文檔app

  • 案例三:能夠搜索並下載文件的雲存儲網站,相似百度雲 文檔:每個文件具體內容信息,就是文檔less

等等案例不少,那麼文檔就是相似數據庫裏面的一條長長的存儲記錄。文檔(Document)是索引信息的基本單位。socket

文檔被序列化成爲 JSON 格式,物理保存在一個索引中。JSON 是一種常見的互聯網數據交換格式:elasticsearch

  • 文檔字段名:JSON 格式由 name/value pairs 組成,對應的 name 就是文檔字段名
  • 文檔字段類型:每一個字段都有對應的字段類型:String、integer、long 等,並支持數據&嵌套

1.2 文檔的 Unique ID

file

每一個文檔都會有一個 Unique ID,其字段名稱爲 _idide

  • 自行設置指定 ID 或經過 Elasticsearch 自動生成
  • 其值不會被索引
  • 注意:該 _id 字段的值能夠在某些查詢 term, terms, match, query_string, simple_query_string 等中訪問,但不能在 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

2、索引(Index)

2.1 索引不一樣意思

做爲名詞,索引表明是在 Elasticsearch 集羣中,能夠建立不少不一樣索引。也是本小節要總結的內容。

做爲動詞,索引表明保存一個文檔到 Elasticsearch。就是在 Elasticsearch 建立一個倒排索引的意思

2.2 什麼是索引

索引,就是類似類型文檔的集合。相似 Spring Bean 容器裝載着不少 Bean ,ES 索引就是文檔的容器,是一類文檔的集合。

之前導入了 kibana_sample_data_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 別名大有做爲,好比 my_index 遷移到 my_index_new , 數據遷移後,只須要保持一致的別名配置。那麼經過別名訪問索引的業務方都不須要修改,直接遷移便可。

2.3 跟 MySQL 類比

基本理解了 Elasticsearch 重要的兩個概念,能夠將 ES 關鍵點跟關係型數據庫類好比下:

file

3、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

資料:

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索