使用客户端kibana操作ElasticSearch
你在左边缩写的语句,kibana会帮助你进行缓存,所以你不用担心kibana关闭后消失。
索引(Index)的基本操作
# 创建索引
PUT /dangdang/
# 删除索引
DELETE /dangdang
# 删除所有索引[慎用:ElasticSearch会自带两个索引,如果删除kibana客户端将不能使用,只有重启]
DELETE /*
# 查看索引信息
GET /_cat/indices?v
类型(type)的基本操作
创建类型
注意: 这种方式创建类型要求索引不能存在
# 创建/book索引并创建(musicbook)类型
PUT /book
{
"mappings": {
"musicbook": {
"properties": {
"name":{
"type":"keyword"
},
"price":{
"type":"double"
},
"desc":{
"type":"text"
}
}
}
}
}
/book:即我们创建的索引名字
“mappimgs”:映射,固定写法,即对类型的数据结构进行约束,这样在添加文档时,就会有约束
“musicbook”:即类型名,ES6之后建议一个索引创建一个类型
“properties”:属性,固定写法,即将类型所要创建的属性添加在里面
“name”…等:属性名
“type”:固定写法,约束类型,可以根据属性的不同写不同类型
Mapping Type: : text , keyword , date ,integer, long , double , boolean or ip
查看类型
# 语法
GET /索引名/_mapping
# 比如
GET /book/_mapping
结果:
{
"book" : {
"mappings" : {
"musicBook" : {
"properties" : {
"desc" : {
"type" : "text"
},
"name" : {
"type" : "keyword"
},
"price" : {
"type" : "double"
}
}
}
}
}
}
文档(document)的基本操作
添加文档
如果不指定id,ES默认会生成一个随机id,后面操作文档都根据此id
这也是为什么在给类型添加属性时,一般不添加id属性
# 语法 PUT /索引/类型/id
PUT /book/musicBook/1
{
"name":"音乐书",
"price":"22.0",
"desc":"这是一本音乐书"
}
返回结果:
{
"_index" : "book",
"_type" : "musicBook",
"_id" : "1",
"_version" : 3,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
查询文档
# 语法 GET /索引/类型/id
GET /book/musicBook/1
返回结果:
{
"_index" : "book",
"_type" : "musicBook",
"_id" : "1",
"_version" : 3,
"_seq_no" : 2,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "音乐书",
"price" : "22.0",
"desc" : "这是一本音乐书"
}
}
删除文档
# 语法 DELETE /索引/类型/id
DELETE /book/musicBook/1
返回结果:
{
"_index" : "book",
"_type" : "musicBook",
"_id" : "1",
"_version" : 4,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}
更新文档
错误方式:
POST /book/musicBook/1
{
"name":"张三"
}
# 查看文档:覆盖掉了原有的属性信息,只有新更新的
{
"_index" : "book",
"_type" : "musicBook",
"_id" : "1",
"_version" : 2,
"_seq_no" : 5,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "张三"
}
}
正确方式: 使用关键词_update
POST /索引/类型/id/_update
{
"doc":{
"属性名":"值"
}
}
# 方式一:在原有数据基础上进行更新
POST /book/musicBook/1/_update
{
"doc": {
"price":"40"
}
}
# 第二种方式:添加新的约束的数据
这种方式,type并没有color属性,但你添加的时候,ES会给你进行相应的匹配
POST /book/musicBook/1/_update
{
"doc": {
"color":"红色"
}
}
# 第三种方式:根据script脚本进行更新[使用较少]
POST /book/musicBook/1/_update
{
"script": "ctx._source.price += 5.0"
}
批量操作
有时候,想要同时添加文档、删除文档、修改文档、索引文档组合进行
使用关键词 _bulk
# 同时索引两个文档
PUT /book/musicBook/_bulk
{"index":{"_id": "3"}}
{ "name":"童话书", "price":"21","des":"这是一本童话书"}
{"index":{"_id": "4"}}
{"name":"冒险书","price":"24","desc":"这是一本冒险书"}
# 同时修改和删除文档
PUT /book/musicBook/_bulk
{"update":{"_id":"3"}}
{"doc":{"name":"修改后的童话书"}}
{"delete":{"_id":"4"}}
注意:所谓批量操作,简单说就是你想进行删除操作,你就使用"delete"关键词,想要进行修改操作,你就使用"update"关键词
批量时不会因为一个失败而全部失败,而是继续执行后续操作,批量在返回时按照执行的状态开始返回