目录
发表日期:2019年9月19日
上节回顾
在学习新的内容之前,先回顾一下上节的内容,上节主要讲述了以下的内容:
- ElasticSearch是什么?什么是搜索引擎?为什么选择ElasticSearch?
- 搜索是怎么做到的:分词、倒排索引?
- 环境的搭建
- 如何通过kibana操作elasticsearch
- hello world中讲述了如何使用“写数据->查指定数据”,"写数据->通过关键字搜索数据"
本节前言
这节将涉及index、type、document的增删查改相关的内容。
index就像sql中的库,type就像sql中的表,document就像sql中的记录。
这节认识index,type,document,会帮助我们认识ElasticSearch数据存储的逻辑结构。就好像你学SQL要先学会了建库、建表,才能插入记录。而一些更深一点的内容,例如如何对document进行搜索、排序,这些将留到下一节再讲。
索引index
索引index是存储document文档数据的结构,意义类似于关系型数据库中的数据库。
创建索引
在上一节的hello world中,我们并没有讲如何创建索引,那里直接就插入了数据,那样的话ElasticSearch会帮我们以默认的配置来自动创建索引。
下面讲一下如何手动创建索引:
语法:
// 语法:
PUT /索引名
{
index的配置(primary shard的数量等)
}
例子:
// 例子(不带配置信息的话以默认配置创建)【请不要复制这个注释!】:
PUT /product
// 例子(带配置信息的话以配置信息创建)【请不要复制这个注释!】
PUT /product
{
"settings":{
"index":{
"number_of_shards":3,
"number_of_replicas":1
}
}
}
在上述的例子中:number_of_shards是主分片的数量;number_of_replicas是副本分片的数量(这里提一下,number_of_replicas副本分片的数量是面向主分片的,所以这个值为1时代表每一个主分片有一个副本分片)。
返回结果:
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "product"
}
【在插入一个文档的时候,如果index还没有创建,那么会自动创建,这时候index的一些配置会采用默认的配置,默认的主分片数量是5,副本分片数量是1】
查看索引
查看单个索引
语法:GET /索引名
效果:返回指定索引的信息
例子:GET /product
返回结果解析:
- aliases:是索引的别名,由于我们没有定义索引别名所以没有数据(索引别名后面再讲)
- mappings:是索引中存储的数据的结构信息,由于上图的索引product中并没有存储document,而且我们也没有指定,所以也为空。mappings定义了文档的字段的数据类型和搜索策略等信息。【后面的知识点】
- settings:索引的配置信息
- creation_date是创建日期(毫秒级别的时间戳)
- number_of_shards是主分片数量
- number_of_replicas是副本分片的数量
- uuid是索引的id
- version是索引的版本信息
- provided_name是索引名
一个包含了mappings的结果图:
查看所有索引
命令:GET /_cat/indices?v
效果:查看所有索引,显示索引的健康状态等信息。
【如果没有v选项,那么就不会有第一行关于该列意义的头部】
返回结果解析:
- health: 索引的健康状态(受分片的运行状态影响)【集群管理的知识点】
- status: 索引是开启的还是关闭的
- index: index的名称
- uuid:索引的UUID
- pri: primary shared的数量
- rep: replicated shared的数量
- docs.count: 文档document的数量
- docs.deleted: 被删除的文档document的数量
- store.size:总数据的大小
- pri.store.size:主分片上的数据的大小(这里因为只运行了一个服务节点,所以没有可运行的副本分片,所以总数据大小等于主分片的数据大小)
删除索引
语法:DELETE /索引名
【支持同时删除多个索引,以逗号分割,如DELETE /testindex1,testindex2】
语法例子:DELETE /product
返回结果:【当acknowledged为true的时候代表删除成功】
{
"acknowledged": true
}
修改索引
【修改索引主要是修改分片数量、mapping、分词器,由于mapping和分词器涉及很深,需要前置知识,所以留到后面讲。】
修改副本分片数量
不讲语法了,直接看例子:
PUT /product/_settings
{
"index":{
"number_of_replicas":2
}
}
关闭索引
关闭索引是为了避免修改索引的配置时他人进行文档读写。关闭索引后,就只能获取索引的配置信息,而不能读写索引中的document。有时候也用于关闭一些无用的索引来减少资源消耗。
语法:
- 关闭索引:
POST /索引名/_close
- 打开索引:
POST /索引名/_open
索引别名
索引别名是一个“别名”,但能够像索引名那样使用,它的使用场景一方面是“使用更简洁的索引名来获取数据”,另一个方面是“通过索引别名来指向索引(别名B指向索引A),方便修改指向的索引,用于解决可能的更换索引的场景(比如你需要统一修改原有索引的信息,那你可以新建索引C,C存储了修改后的数据,更改指向原本索引A的索引别名B指向C)。”
增加索引别名:
语法:
POST /_aliases
{
"actions":[
{
"add":{
"index":"索引名",
"alias":"索引别名"
}
}
]
}
例子:
POST /_aliases
{
"actions":[
{
"add":{
"index":"product",
"alias":"pdt&q