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"