ElasticSearch系列 - 文檔&索引
對比MySQL
MySQL | ElasticSearch |
---|---|
Table | Index(Type) |
Row | Document |
Column | Field |
Schema | Mapping |
SQL | DSL |
- ElasticSearch:Schemeless(弱模式)/相關性/高性能全文檢索
- MySQL:事務/join
文檔(Document)
ElasticSearch是面向文檔的,文檔是所有可搜索數據的最小單位
- 一個error日誌
- 一個房屋具體信息
- 一個詳細的用戶信息
文檔會被序列化爲JSON格式,保存在ElasticSearch中
- JSON對象由字段組成
- 每個字段都有對應的字段類型(字符串/數值/布爾/日期/二進制/範圍類型)
每個文檔都有一個Unique ID
- 可以指定ID
- 或者通過ElasticSearch自動生成
JSON文檔
一篇文檔包含一系列的字段,對比數據庫表中一條記錄
JSON文檔,格式靈活,不需要預先定義格式
- 字段的類型可以指定或者ElasticSearch自動推算
- 支持數組/支持嵌套
例如下述一個文檔
userId,name,content
1,wxt,12|150xxxxxxxx|message
對應ElasticSearch中的JSON爲
{
userId:1,
name:"wxt",
@version:"1",
content:["12","150xxxxxxxx",message]
}
PS:不一定是上述這種格式,根據Logstash的conf配置不同,解析的規則也不同,生成的JSON格式也不同。
元數據
{
"_index":"userInfo",
"_type":"_doc",
"_id":"1",
"_score":15.69303,
"_source":{
userId:1,
name:"wxt",
@version:"1",
content:["12","150xxxxxxxx",message]
}
},
名稱 | 含義 |
---|---|
_index | 文檔所屬索引名 |
_type | 文檔所屬的類型名 |
_id | 文檔唯一Id |
_source | 文檔原始Json數據 |
_score | 相關性打分 |
@version | 文檔版本信息 |
_all | 已經被廢除 |
索引(Index)
Index 索引是文檔的容器,是一類文檔的結合
- Index體現了邏輯空間的概念,每個索引都有自己的Mapping定義,用於定義包含的文檔的字段名和字段類型
- shard體現物理空間概念,索引中的數據分散在Shard上
索引的Mapping與Settings
- Mapping定義文檔字段的類型
- Setting定義不同的數據分佈
{
"userInfo":{
"settings":{
"index":{
"creation_date":12345678932,
"number_of_shards":"2",
"number_of_replicas":"0",
"uuid":"QND213SJBDJ12JHS",
"version":{
"created":"9381311"
},
"provided_name":"movies"
}
}
}
}
Type
在7.0之前一個Index可以設置多個type,7.0之後一個索引只能創建一個type-"_doc"