创建索引
PUT /索引名称?pretty
查询索引
GET _cat/indices?v
删除索引
DELETE /索引名称?pretty
插入数据
语法格式:
POST/index名称/type名称/id值
{
Json数据
}
id值可以不进行指定,如果不指定,将生成一个随机字符串的id
ps:当然,在es7中,弱化了type的概念,因此统一都用“_doc”的type进行表示
例子:
创建product索引下,若干条记录
POST/product/_doc/1
{
"name" : "xiaomi phone",
"desc" : "shouji zhong de zhandouji",
"price" : 3999,
"tags": [ "xingjiabi", "fashao", "buka" ]
}
POST/product/_doc/2
{
"name" : "xiaomi nfc phone",
"desc" : "zhichi quangongneng nfc,shouji zhong de jianjiji",
"price" : 4999,
"tags": [ "xingjiabi", "fashao", "gongjiaoka" ]
}
POST/product/_doc/3
{
"name" : "nfc phone",
"desc" : "shouji zhong de hongzhaji",
"price" : 2999,
"tags": [ "xingjiabi", "fashao", "menjinka" ]
}
POST/product/_doc/4
{
"name" : "xiaomi erji",
"desc" : "erji zhong de huangmenji",
"price" : 999,
"tags": [ "low", "bufangshui", "yinzhicha" ]
}
POST/product/_doc/5
{
"name" : "hongmi erji",
"desc" : "erji zhong de kendeji",
"price" : 399,
"tags": [ "lowbee", "xuhangduan", "zhiliangx" ]
}
还可以这样: create与上面插入的区别就是,如果数据已存在,不会更新,而是报错。

查询数据
语法
全量搜索
GET /索引名/type类型/_search
id匹配搜索
GET /索引名/type类型/id值
例子
查询product索引下的所有数据
GET /product/_doc/_search
{
"took" : 2, //查询时间(毫秒数)
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "product",
"_type" : "_doc",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"name" : "nfc phone",
"desc" : "shouji zhong de hongzhaji",
"price" : 2999,
"tags" : [
"xingjiabi",
"fashao",
"menjinka"
]
}
},
{
"_index" : "product",
"_type" : "_doc",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "xiaomi erji",
"desc" : "erji zhong de huangmenji",
"price" : 999,
"tags" : [
"low",
"bufangshui",
"yinzhicha"
]
}
},
{
"_index" : "product",
"_type" : "_doc",
"_id" : "5",
"_score" : 1.0,
"_source" : {
"name" : "hongmi erji",
"desc" : "erji zhong de kendeji",
"price" : 399,
"tags" : [
"lowbee",
"xuhangduan",
"zhiliangx"
]
}
},
{
"_index" : "product",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "xiaomi phone",
"desc" : "shouji zhong de zhandouji",
"price" : 99999
}
}
]
}
}
当然,_search这种搜索可以带参数:
根据价格正序查询:
GET /product/_doc/_search?sort=price:asc
匹配price为666的数据
GET /product/_doc/_search?q=price:666
更新数据
全量字段更新
语法格式
PUT /index名称/type名称/id值
{
Json数据
}
类似于插入操作,如果检测到已经存在当前id的数据,那么会将新值把老值覆盖,但存在问题:如果不给字段,那么原有字段就意味着丢失了。
例子
接下来操作一下id为1的product数据,先查看一下:
GET /product/_doc/1
{
"_index" : "product",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "xiaomi phone",
"desc" : "shouji zhong de zhandouji",
"price" : 3999,
"tags" : [
"xingjiabi",
"fashao",
"buka"
]
}
}
对id为1的product进行更新:
PUT /product/_doc/1
{
"name" : "xiaomi phone",
"desc" : "shouji zhong de zhandouji",
"price" : 12999
}
再次查看:
GET /product/_doc/1
{
"_index" : "product",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"_seq_no" : 5,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "xiaomi phone",
"desc" : "shouji zhong de zhandouji",
"price" : 12999
}
}
发现,tags没了,这属于全量字段覆盖。
指定字段更新
语法格式
POST /索引名/type类型/id/_update
{
"doc":{
"字段名称":value
}
}
例子
还是修改product id为1的数据,只改price:
POST /product/_doc/1/_update
{
"doc":{
"price":99999
}
}
然后发现其他字段没少,price也成功改成了99999了。
乐观锁:

删除数据
DELETE /索引名/type类型/id
delete不会立马将数据物理删除,而是一种延时删除(软删除),当积攒到一定量时ES集体将这些无效数据进行清除。
这体现在:如果你立马将某一条id数据删除后,又立马进行插入一条相同id的数据,此时它的版本号是在之前删除的数据版本号上进行递增的。
返回格式美化
当你在浏览器进行访问ES的REST API的时候,返回的JSON可能是不太美观的。
可以在最后参数后面跟一个pretty,可以返回格式化的json信息。
例如:
GET /product/_doc/1?pretty
1194

被折叠的 条评论
为什么被折叠?



