Elasticsearch 第二篇:基本概念和基础操作
上一篇文章,我们已经是在Windows10 上搭建了 Elasticsearch 环境已经安装了相关的插件,现在我们就可以像操作webapi一样简单的操作 ElasticSearch 了,有园友说可以用谷歌插件 Sense 来操作,不管了,这里就用最常见的软件 Postman 来进行测试和学习。在进行接口测试之前,先了解一下基本概念。
Elasticsearch 基本概念
1、Near RealTime 准实时
Elasticsearch 是一个准实时的搜索平台。准实时是指:ES写入数据、搜索数据的时候会有一些时间上的延迟,但一般是在1s以内,接近实时。
2、Cluster 集群
节点(服务器)的集合就形成集群,集群包含一个或者多个节点,这些节点分工合作,一起保存整个数据,并提供联合索引和搜索的功能。每个ES实例都默认有一个 clustername 属性(这个属性默认值是 “Elasticsearch” ),如果多个ES实例的 clustername 都一样,例如都是“MySearch”,则这多个实例都启动运行起来,就形成一个集群。反之,如果各个实例的 clustername 不同,那么这些实例各自独立,不构成集群,也没有分工合作的产生。
3、Node 节点
节点是组成集群的一个单独服务器,用于存储数据并提供集群的搜索和索引功能。节点同样有唯一一个名字,可以手动指定节点的名字,然后按照配置加入指定的集群。
4、Index 索引库
索引是具有相似特性的文档集合,ES中索引是存放数据的地方,和关系型数据库的索引有区别,类似关系型数据库“库”的概念。
5、Type 类型
每个Index下面,有一个或者多个Type(ES最新版规定Index下面只有一个Type),区分数据类型,相当于关系型数据库“表”的概念,但是高版本的ES,这个Type的概念可能已经是弃用。
6、Document 文档
ES中最小的数据单元就是文档,相当于关系型数据库中某一个表的某一条记录,会被ES压缩成json格式。
7、Field 字段
相当于关系型数据库“列”的概念。
8、Shard 分片
什么是分片?当我们建立一个索引时,这个索引的数据可以分成几部分,每一部分叫做一个分片,在集群模式下,分片可以分布在若干节点上,而每个分片可以复制多个备份,每个备份简称为分片的复制,分片和它的复制通常放在不同的节点上,这是因为集群允许某个节点出现问题时,可以从其他节点找到对应的数据,如果分片和它对应的复制放在同一节点上,当这一节点出现问题,其他节点再也找不到这一部分的数据,集群也失去了意义。
Elasticsearch 基础操作
1、添加文档
格式是 put /<index>/_doc/<_id>
或者是 put /<index>/_create/<_id>
或者是 post /<index>/_create/<_id>
当不需要指定 id 时,也可以是 post /<index>/_doc
例如往索引库 db_news 添加文档,该文档是一则新闻信息,并指定该文档的编号为 1 :
PUT http://localhost:9200/db_news/_doc/1 { "title": "今日头条新闻1", "author": "新华时报记者1", "content": "今日券商股继续涨停1" }
2、修改文档
格式是 put /<index>/_doc/<_id>
修改就是覆盖,例如我们修改以上id=1的文档:
PUT http://localhost:9200/db_news/_doc/1 { "title": "今日头条新闻2", "author": "新华时报记者2", "content": "今日券商股继续涨停2" }
有时候,我们并不希望直接覆盖数据,当索引库中存在这个文档时,我们希望能提醒已存在,这时可以带上参数 op_type=create , 响应时会提醒修改出现冲突,有效避免文档被修改
PUT http://localhost:9200/db_news/_doc/1?op_type=create
{
"title": "今日头条新闻40",
"author": "新华时报记者40",
"content": "今日券商股继续涨停40"
}
注意每修改一次文档,ES中该文档的 _version 属性都会自增1
3、删除文档
格式是 delete /<index>/_doc/<_id>
删除很简单,传入id即可:
DELETE http://localhost:9200/db_news/_doc/1
4、文档基础查询
格式是 get /<index>/_doc/<_id>
查询指定库 db_news,指定表 new 的某条文档( id=1):
GET http://localhost:9200/db_news/_doc/1
当然,如果要控制返回的数据结构(即:哪些字段显示,哪些字段不显示),可以参考这篇博文 https://www.cnblogs.com/chenhuabin/p/13983303.html
查询是一个比较复杂的用法,下一篇再总结一下。
5、超时控制
此外,在执行创建文档、修改文档时,有可能因为网络原因导致操作超时,ES 默认超时时间是 1分钟,但是可以通过调整参数限制超时时间,
例如,添加文档时,限定超时时间为5分钟,可以加上参数 timeout = 5m
PUT http://localhost:9200/db_news/_doc/1?timeout=5m { "title":"今日头条新闻", "author":"新华时报记者", "content":"今日券商股继续涨停" }