前言
Elasticsearch有一些基本概念,包括:文档、索引、节点和分片,等等。文档和索引更多是偏向于开发,而节点和分片更多是偏向于运维。在本文中,我们主要讨论文档和索引相关的概念。
文档
文档,是Elasticsearch可搜索的最小单元,包含一系列字段。文档最终是序列化成JSON的格式。每个文档都有一个唯一id,字段名为_id
。文档支持的数据类型可以为字符串、数字、数组和对象,其中数组和对象可以相互嵌套。
文档本身除了包含自定义的字段外,还包含一些元数据,如下所示。
_index // 文档所属的索引名
_type // 文档所属的类型名。
_id // 文档唯一键id
_source // 原始json数据
_all // 整合所有字段内容到该字段,7.x已废弃
_version // 文档的版本信息
_score // 相关性分数
【注意】:_type字段,6.x已废弃,7.x已删除。从7.0开始,一个索引只能创建一个类型,也就是
_doc
。
索引
索引是相似文档的集合或容器。索引(Index)更多是体现逻辑空间的概念,而分片(Shard)更多是体现物理空间的概念。索引主要包括两大类,Mapping和Setting。
- Mapping,定义文档字段的类型
- Setting,定义不同的数据分布,包括Shard
【注意】:索引这个词在不同的上下文环境,有不同的语义。例如:
- 名词:一个Elasticsearch可以创建多个索引
- 动词:保存一个文档到索引的过程
- 其他:关系型数据中的B+树索引,或者Elasticsearch的倒排索引
Elasticsearch和RDBMS的类比
其实,Elasticsearch的各种概念和RDBMS(如Mysql)是完全不同的,但是如果我们硬要对他们进行比较的话,可以简单地做以下类比。
RDBMS | Elasticsearch |
---|---|
Table | Index |
Row | Document |
Column | Field |
Schema | Mapping |
SQL | DSL |
REST API
Elasticsearch所有的API都是通过restful的接口来暴露的,因此我们可以通过简单的http接口来对Elasticsearch进行各种操作。
借助于Kibana的Dev Tools,我们可以写一些demo,如下所示:
GET kibana_sample_data_ecommerce -- 查看索引相关信息
GET kibana_sample_data_ecommerce/_count -- 查看总数
GET kibana_sample_data_ecommerce/_search -- 查看前10条
GET /_cat/indices/kibana*?v&s=index -- 查找索引名以kibana开头的索引
GET /_cat/indices?v&health=green -- 查看状态为绿色的索引
GET /_cat/indices?v&s=docs.count:desc -- 按照文档个数进行排列
GET /_cat/indices?v&h=i,tm&s=tm:desc -- 查看每个索引的内存
【注】:kibana_sample_data_ecommerce为索引名字
总结
通过学习极客时间《Elasticsearch核心技术与实战》的第9节,我们对Elasticsearch的基本概念有了一定的认识,主要包括文档和索引。在文章的最后一部分,我们写了一些简单的例子,加深了我们对RESTAPI实际使用的印象。