文章目录
- 1. 环境安装
- 2. es与mysql对比在这里插入图片描述
- 3. kibana界面
- 4. 创建索引
- 5. 删除索引
- 6. 查看ES相关信息
- 6.1 查看es健康状态
- 6.2 查看es的节点
- 6.2.1 查看es的所有节点
- 6.2.2 查看es的主节点
- 6.3 查看es的索引
- 6.3.1 查看es的所有索引
- 6.3.2 查看es的所有索引并指定响应返回的数据格式
- 6.3.3 查看es的索引设置
- 7. 新增文档数据
- 7.1 自定义文档id可用PUT
- 7.2 系统默认文档id可用POST
- 8. 查询文档数据
- 8.1 查询全部文档数据
- 8.2 查询单个记录
- 8.3 查询文档的字段数据
- 8.3 条件查询文档数据
- 8.3.1 根据指定字段的值查询对应数据
- 8.3.2 根据指定字段的值(多个值)查询对应数据
- 8.3.3 根据指定字段的值(多个值)查询对应数据(短句匹配)
- 8.3.4 根据指定字段的值(多个值)查询对应数据(精确匹配)
- 8.3.5 多字段匹配条件查询
- 8.3.6 符合条件查询
- 8.3.7 过滤条件查询
- 8.4 条件查询文档数据(分页、排序、展示)
- 9. 修改/更新文档数据
- 9.1 PUT修改
- 9.2 POST更新
- 10. 删除文档数据
- 10.1 删除单个文档数据
- 10.2 删除某索引下的所有文档
- 11. 批量操作bulk
- 11.1 批量删除
- 11.2 批量新增(需要有请求体)
- 11.3 批量索引(需要有请求体)
- 11.4 批量更新
1. 环境安装
先安装elasticsearch和kibana
可参考:
elasticsearch下载、安装、配置kibana下载、安装、配置
2. es与mysql对比在这里插入图片描述
索引index
即数据库table
类型type
即表数据类型
文档document
即数据记录row
就是一条记录
字段field
即数据字段信息column
3. kibana界面
安装好kibana和es之后,先启动es再启动kibana
然后访问kibana界面,找到management中的dev tools进行es的增删改查操作
在界面的Console控制台输入并执行命令,每行命令后会有一个绿色三角形,点击即可运行命令
4. 创建索引
语法格式:
PUT 索引名
如创建索引名为deviceinfo的索引
PUT deviceinfo
注:不能有特殊字符,不能有大写字母,支持纯小写
也可以创建索引时设置索引,不设置则使用系统默认设置
PUT deviceinfo/
{
"settings":{
"index":{
"number_of_shards":2,
"number_of_replicas":1
}
}
}
number_of_shards
分片数量,建立后不可修改number_if_replicas
备份数量
5. 删除索引
语法格式:
DELETE 索引名
如删除索引名为deviceinfo的索引
DELETE deviceinfo
6. 查看ES相关信息
6.1 查看es健康状态
GET _cat/health
或加上v参数输出详细信息
GET _cat/health?v
6.2 查看es的节点
6.2.1 查看es的所有节点
GET _cat/nodes
或加上v参数输出详细信息
GET _cat/nodes?v
6.2.2 查看es的主节点
GET _cat/master
6.3 查看es的索引
6.3.1 查看es的所有索引
GET _cat/indices
或加上v参数输出详细信息
GET _cat/indices?v
6.3.2 查看es的所有索引并指定响应返回的数据格式
GET _cat/indices?format=json
6.3.3 查看es的索引设置
语法格式:
GET 索引名/_settings
如查看索引名为deviceinfo的索引设置
GET deviceinfo/_settings
7. 新增文档数据
新增文档可用PUT或POST
7.1 自定义文档id可用PUT
新增数据时带有文档id参数(自己定义命名的)的情况,用PUT
语法格式:
PUT 索引名/类型名/文档id
{
字段名1:字段值1,
字段名2:字段值2,
字段名3:字段值3
}
如新增索引deviceinfo下类型为netinfo文档id为1的文档数据
PUT deviceinfo/netinfo/1
{
"net_name":"http001",
"net_type":"3g",
"net_size":"0.15M"
}
执行后结果如下
7.2 系统默认文档id可用POST
当新增的参数中不加文档id参数时,则用POST,新增后系统自动生成默认的文档id(一个字符串)
语法格式:
POST 索引名/类型名/
{
字段名1:字段值1,
字段名2:字段值2,
字段名3:字段值3
}
如新增索引deviceinfo下类型为netinfo文档id为1的文档数据
POST deviceinfo/netinfo/
{
"net_name":"http002",
"net_type":"3g",
"net_size":"0.17M"
}
注:如果使用默认的文档id,前提是这个类型必须是已经存在的,如果是新增的类型不带文档id执行命令会失败
新增后结果如下
8. 查询文档数据
到指定的索引、类型查看文档数据
8.1 查询全部文档数据
语法格式:
GET 索引名/类型名/_search
或者
GET 索引名/类型名/_search
{
"query":{
"match_all":{}
}
}
如查询索引名为deviceinfo类型为netinfo的文档数据
GET deviceinfo/netinfo/_search
或者
GET deviceinfo/netinfo/_search
{
"query":{
"match_all":{}
}
}
执行命令可以查看到之前插入的两条文档数据,结果如下
8.2 查询单个记录
语法格式:
GET 索引名/类型名/文档id
如查询索引名为deviceinfo类型名为netinfo中文档id为1的数据
GET deviceinfo/netinfo/1
结果如下
8.3 查询文档的字段数据
语法格式:
GET 索引名/类型名/文档id?_source=字段名1,字段名2
如查询索引名为deviceinfo类型名位netinfo文档id为1字段名为net_name和net_type的数据
GET deviceinfo/netinfo/1?_source=net_name,net_type
查询结果如下
8.3 条件查询文档数据
8.3.1 根据指定字段的值查询对应数据
GET /索引名/_search
{
"query":{
"match":{
"字段名":"字段值"
}
}
}
8.3.2 根据指定字段的值(多个值)查询对应数据
查询字段名的值为值1和值2的数据
GET /索引名/_search
{
"query":{
"match":{
"字段名":"字段值1 字段值2"
}
}
}
8.3.3 根据指定字段的值(多个值)查询对应数据(短句匹配)
查询字段名的值为值1和值2的数据
match_phrase短句匹配,不会对查询条件进行分词检索
GET /索引名/_search
{
"query":{
"match_phrase":{
"字段名":"字段值1 字段值2"
}
}
}
8.3.4 根据指定字段的值(多个值)查询对应数据(精确匹配)
查询字段名的值为值1和值2的数据
match_phrase短句匹配
字段名后加.keyword表示精确匹配,匹配的条件就是要显示字段的全部值,要进行精确匹配的
GET /索引名/_search
{
"query":{
"match_phrase":{
"字段名.keyword":"字段值1 字段值2"
}
}
}
8.3.5 多字段匹配条件查询
查询字段名的值为值1和值2的数据
multi_match表示多字段匹配查询方式
query是多个字段的对应的同一个值
fields表示多个字段的集合
如下为查询字段名1和字段名2的值都为字段值的数据
GET /索引名/_search
{
"query":{
"multi_match":{
"query":"字段值"
"fields":["字段名1","字段名2"]
}
}
}
8.3.6 符合条件查询
bool表示符合查询
must表示必须达到must列举的所有条件
must_not表示必须不匹配must_not列举的所有条件
should表示应该满足should所列举的条件,类似or
达到should列举的条件,如果达到会增加相关文档的评分,不会改变查询的结果
如果query中只有should且只有一种匹配规则,则should的条件就会被作为默认匹配条件而去改变查询结果
GET /索引名/_search
{
"query":{
"bool":{
"should":[
{
"match":{
"字段名1":"字段值1"
}
},
{
"match":{
"字段名2":"字段值2"
}
}
],
"must":[
{
"match":{
"字段名3":"字段值3"
}
}
]
}
}
}
8.3.7 过滤条件查询
filter结果过滤,不计算得分,不是所有的查询都会产生分数,仅用于filter的文档查询更不会产生分数
GET /索引名/_search
{
"query":{
"bool":{
"must":[
{
"match":{
"字段名1":"字段值1"
}
}
],
"filter":{
"range":{
"过滤字段名":{
"gte":"10",
"lte":"100"
}
}
}
}
}
}
更多查询技巧请参考:kibana操作es
8.4 条件查询文档数据(分页、排序、展示)
可添加如下参数进行条件查询、分页查询、排序、指定字段查询
GET 索引名/_search
{
"query":{
"match_all":{}
},
"from":0,
"size":5,
"sort":{
"排序字段名":{
"order":"desc"
}
},
"_source":["字段名1","字段名2"]
}
注:
match_all
查询类型,查询所有from
分页查询从0开始size
分页查询每页5个sort
排序,可指定字段进行排序_source
指定查询结果展示的字段,支持多个
9. 修改/更新文档数据
可用PUT方式或者POST方式
9.1 PUT修改
PUT属于修改,必须包含文档id
语法格式:
PUT 索引名/类型名/文档id
{
"字段名1":"新的字段值1",
"字段名2":"新的字段值2",
"字段名3":"新的字段值3"
}
如修改索引名为deviceinfo类型名为netinfo文档id为1的文档数据
PUT deviceinfo/netinfo/1
{
"net_name":"http003",
"net_type":"4g",
"net_size":"0.28M"
}
查询修改后的内容
GET deviceinfo/netinfo/1
内容已更新
9.2 POST更新
使用post进行更新数据
POST属于新增,
当不带_update时,没有文档id则会新增文档id,属于新增数据,有id时则执行修改操作
当带_update时,会比较doc中的字段值是否一致,一致则不修改,不一致则修改
当不带_update时,重复执行更新操作,数据更新反馈是成功
语法格式:
POST 索引名/类型名/文档id/_update
{
"doc":{
"字段名":"新的字段值"
}
}
如修改索引名为deviceinfo类型名为netinfo文档id为1字段名为net_name的值
POST deviceinfo/netinfo/1/_update
{
"doc":{
"net_name":"http004"
}
}
修改后查询结果如下
GET deviceinfo/netinfo/1
10. 删除文档数据
10.1 删除单个文档数据
语法格式:
DELETE 索引名/类型名/文档id
如删除索引名为deviceinfo类型名为netinfo文档id为1的数据
DELETE deviceinfo/netinfo/1
10.2 删除某索引下的所有文档
POST deviceinfo/_delete_by_query
{
"query":{
"match_all":{}
}
}
11. 批量操作bulk
11.1 批量删除
语法格式:
POST /索引名/类型名/_bulk
{"delete":{"_index":"索引名","_type":"类型名","_id":"文档id"}}
如
POST /deviceinfo/netinfo/_bulk
{"delete":{"_index":"deviceinfo","_type":"netinfo","_id":"1"}}
11.2 批量新增(需要有请求体)
语法格式:
POST /索引名/类型名/_bulk
{"create":{"_index":"索引名","_type":"类型名","_id":"文档id1"}}
{"字段名":"字段值"}
{"create":{"_index":"索引名","_type":"类型名","_id":"文档id2"}}
{"字段名":"字段值"}
或者
POST /索引名/类型名/_bulk
{"index":{}}
{"字段名1":"字段值1","字段名2":"字段值2"}
{"index":{}}
{"字段名3":"字段值3","字段名4":"字段值4"}
如
POST /deviceinfo/netinfo/_bulk
{"create":{"_index":"deviceinfo","_type":"netinfo","_id":"1"}}
{"net_name":"http1001"}
11.3 批量索引(需要有请求体)
语法格式:
POST /索引名/类型名/_bulk
{"index":{"_index":"索引名","_type":"类型名"}}
{"字段名":"字段值"}
注:没有指定id系统会自动生成
如
POST /deviceinfo/netinfo/_bulk
{"index":{"_index":"deviceinfo","_type":"netinfo"}
{"net_name":"http1002"}
11.4 批量更新
语法格式:
POST /索引名/类型名/_bulk
{"update":{"_index":"索引名","_type":"类型名","_id":"文档id"}}
{"doc":{"字段名":"字段值"}}
如
POST /deviceinfo/netinfo/_bulk
{"update":{"_index":"deviceinfo","_type":"netinfo","_id":"1"}}
{"doc":{"net_name":"http1003"}}