基本概念
Node 与 Cluster
Elastic
本质上是一个分布式数据库
,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例
。
单个 Elastic 实例称为一个节点(node
)。一组节点构成一个集群(cluster
)。
Index
Elastic
会索引所有字段,经过处理后写入一个反向索引(Inverted Index
)。查找数据的时候,直接查找该索引。
所以,Elastic
数据管理的顶层单位就叫做 Index
(索引)。它是单个数据库的同义词。每个 Index (即数据库)
的名字必须是小写。
下面的命令可以查看当前节点的所有 Index
。
$ curl -X GET 'http://localhost:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
Document
Index
里面单条的记录称为 Document
(文档)。许多条 Document
构成了一个 Index
。
Document
使用 JSON
格式表示,下面是一个例子。
{
"user": "张三",
"title": "工程师",
"desc": "数据库管理"
}
同一个 Index
里面的 Document
,不要求有相同的结构(scheme
),但是最好保持相同,这样有利于提高搜索效率。
Type
Document
可以分组,比如weather
这个 Index
里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type
,它是虚拟的逻辑分组,用来过滤 Document。
不同的 Type
应该有相似的结构(schema
),举例来说,id字段不能在这个组是字符串,在另一个组是数值。这是与关系型数据库的表的一个区别。性质完全不同的数据(比如products和logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。
下面的命令可以列出每个 Index 所包含的 Type。
$ curl 'localhost:9200/_mapping?pretty=true'
根据规划,Elastic 6.x 版只允许每个 Index 包含一个 Type,7.x 版将会彻底移除 Type。
参考
全文搜索引擎 Elasticsearch 入门教程 - 阮一峰的网络日志
https://www.ruanyifeng.com/blog/2017/08/elasticsearch.html