前幾天寫過一篇《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
每個文檔都會有一個 Unique ID,其字段名稱為 _id
:
- 自行設置指定 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 文檔元數據
元數據是用於標注文檔的相關信息,那么索引文檔的元數據如下:
- _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 索引就是文檔的容器,是一類文檔的集合。
以前導入了 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 關鍵點跟關系型數據庫類比如下:
三、REST API 方便 ES 被各種語言調用
如圖,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
轉載,請保留原文地址,謝謝 ~