定义不同的数据分布
{ "movies" : { "settings" : { "index" : { "creation_date" : "1570452552", "number_of_shards" : "5", "number_of_replicas" : "1", "uuid" : "pB0UsxjfQT2fW-s8Uy-Nsg", "version" : { "created" : "2030599" } } } } }定义文档字段的类型
{ "movie": { "mappings": { "doc": { "properties": { "songName": { "type": "text" }, "singer": { "type": "text" }, "price": { "type": "integer" } } } } } }索引有不同语义,在 ES 中指的是在集群中创建的索引(名词),也可以指的是文档到 ES 的过程(动词),即是一次倒排索引的过程。而在其他地方看到索引更多表示 B 树索引或者倒排索引。
文档( Document)
Elasticsearch 是面向文档的,文档是所有可搜索数据的最小单位
日志文件中的日志项
一本电影的具体信息
一首歌的详细信息
文档会被序列化成 JSON 格式,保存在 Elasticsearch 中
JSON 对象由字段组成,
每个字段都有对应的字段类型(字符串/数值/布尔/日期/二进制/范围类型)
每个文档都有一个 Unique ID
可以自己指定 ID 或者通过 Elasticsearch 自动生成
案例
{ "songName" : "说好不哭", "singer" : "周杰伦", "price" : 3 }文档的元数据
{ "_index" : "song", "_type" : "_doc", "_id" : "1", "_version" : 1, "found" : true, "_source" : { "songName" : "说好不哭", "singer" : "周杰伦", "price" : 3 } }元数据,用于标注文档的相关信息
_index :文档所属的索引名
_type :文档所属的类型名
_id :文档唯一 Id
_source:文档的原始 JSON 数据
_all:整合所有字段内容到该字段,已被废除
_version:文档的版本信息
_score:相关性打分
类型(Type)
在 7.0 之前,一个 Index 可以设置多个 Types
6.0 开始, Type 已经被 Deprecated。7.0 开始一个索引,只能创建一个 Type -"_doc"。
5、RDBMS VS Elasticsearch
下面是 RDBMS 和 Elasticsearch 一个不是很恰当类比,Elasticsearch 集群可以包含多个索引 Indes(数据库),每一个索引可以包含一个doc类型 Type(表),每一个类型包含多个文档 Document(记录),然后每个文档包含多个字段 Fields(列),DSL 相当于 RDBMS 的 SQL。
RDBMS ElasticsearchSchema Mapping
Table Index(Type)
Column Filed
Row Document
SQL DSL
6、小结
与传统 SQL 数据库管理系统(其花费10秒钟以上的时间来获取所需的搜索查询数据)相比,Elasticsearch 可以在10毫秒内完成此操作。由于 Elasticsearch 具有分布式架构,因此它可以扩展到数千个服务器并容纳PB级的数据。我们不必管理分布式设计的复杂性,因为 ES 已经自动完成。我们有多种方法可以为一些文档建立索引或查询它们,然而在使用 ES 下,我们可以轻松实现在海量数据快速检索全文,得到我们想要的结果。