Juconcurrent 学而不思则罔,思而不学则殆。

Elasticsearch学习笔记(03) - 基本概念:文档、索引和REST API


前言

Elasticsearch有一些基本概念,包括:文档、索引、节点和分片,等等。文档和索引更多是偏向于开发,而节点和分片更多是偏向于运维。在本文中,我们主要讨论文档和索引相关的概念。

文档

文档,是Elasticsearch可搜索的最小单元,包含一系列字段。文档最终是序列化成JSON的格式。每个文档都有一个唯一id,字段名为_id。文档支持的数据类型可以为字符串、数字、数组和对象,其中数组和对象可以相互嵌套。

文档本身除了包含自定义的字段外,还包含一些元数据,如下所示。

image.png

_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

【注意】:索引这个词在不同的上下文环境,有不同的语义。例如:

  1. 名词:一个Elasticsearch可以创建多个索引
  2. 动词:保存一个文档到索引的过程
  3. 其他:关系型数据中的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实际使用的印象。


Content