查询Elasticsearch信息
GET /
和在浏览器输入 localhost:9200 的效果一样,可以看到
{
"name" : "7c235ebfc86d",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "7o5pkQRlQHi4162eYSqq8Q",
"version" : {
"number" : "7.10.1",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "1c34507e66d7db1211f66f3513706fdf548736aa",
"build_date" : "2020-12-05T01:00:33.671820Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
创建索引及文档
创建索引
创建一个叫做 twitter 的索引(index),分别指定字段的类型。设置了2个shards,并且有一个replica。
PUT twitter
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"user":{
"type": "text"
},
"city":{
"type": "keyword"
},
"province":{
"type": "keyword"
},
"country":{
"type": "keyword"
}
}
}
}
返回一下结果说明创建成功!
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "twitter"
}
text和keyword的区别
text
会被分词器解析。keyword
不会被分词器解析。
创建文档
在创建文档时可以使用PUT请求和POST请求来创建索引,区别如下:
- 指定文档ID:
PUT 索引名/_doc/文档ID
。如果文档不存在,就索引新的文档。否则现有文档会被删除,新的文档会被索引。_version + 1。 - 系统自动生成文档ID:
POST 索引名/_doc
,使用POST请求创建系统会自动生成文档ID
使用 PUT 请求在 twitter 索引下创建一个文档
PUT twitter/_doc/1
{
"user": "TL",
"city": "ShangHai",
"province": "ShangHai",
"country": "China"
}
返回以下结果说明创建成功!
{
"_index" : "twitter",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
返回信息描述
_index
: index名称_type
: type 名称_version
: 版本信息,每次执行那个 POST 或者 PUT 接口时,如果文档已经存在,那么相应的版本就会自动加1,之前的版本抛弃。
使用 POST 请求在 twitter 索引下创建一个文档
POST twitter/_doc
{
"user": "TL",
"city": "ShangHai",
"province": "ShangHai",
"country": "China"
}
返回以下结果说明创建成功!
{
"_index" : "twitter",
"_type" : "_doc",
//系统生成的id
"_id" : "UJyJhHkBrelCLU6_H44s",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
查询索引及文档
查询索引
GET twitter
查询索引下全部文档信息
GET twitter/_search
根据文档id精确查询
1为文档的id
GET twitter/_doc/1
查询文档 返回source信息
# 7.0版本之前
GET twitter/_doc/1/_source
# 7.0版本之后
GET twitter/_source/1
查询文档 source 部分信息
user
、city
为字段名称
GET twitter/_source/1?_source=user,city
查询多个文档
_index
: 索引名称_id
: 文档id
GET _mget
{
"docs":[
{
"_index":"twitter",
"_id":"1"
},
{
"_index":"twitter",
"_id":"2"
}
]
}
指定Id查询多个文档
GET twitter/_doc/_mget
{
"ids":[1,2,3]
}
查询多个文档,指定字段
在 _source
中指定字段
GET _mget
{
"docs":[
{
"_index":"twitter",
"_id":"1",
"_source":["user","city"]
},
{
"_index":"twitter",
"_id":"2"
}
]
}
索引、文档 更新及删除
检查索引是否存在
HEAD twitter
如果存在返回
200 - OK
不存在则返回
{"statusCode":404,"error":"Not Found","message":"404 - Not Found"}
删除索引
DELETE twitter
看到以下结果说明删除成功,所有在 twitter 下的文档都会被删除。
{
"acknowledged" : true
}
检查文档是否存在
HEAD twitter/_doc/1
返回一下结果说明存在
200 - OK
PUT 请求更新一个文档
PUT twitter/_doc/1
{
"user": "TL-NEW",
"city": "ShangHai",
"province": "ShangHai",
"country": "China"
}
更新完成后 version +1,可以使用上面的 GET 请求来查询更新后的信息。
通过查询的方式更新文档
POST twitter/_update_by_query
{
"query": {
"match": {
"_id": "1"
}
},
"script": {
"source": "ctx._source.city = params.city;ctx._source.province = params.province",
"lang": "painless",
"params": {
"city":"BJ",
"province":"BJ"
}
}
}
UPSERT 文档
"upsert" 表示更新或插入,即更新文档(如果存在),否则,插入新文档。
doc_as_upsert 参数检查具有给定ID的文档是否已经存在,并将提供的 doc 与现有文档合并。 如果不存在具有给定 ID 的文档,则会插入具有给定文档内容的新文档。
POST twitter/_update/3
{
"doc": {
"user": "TL-3",
"city": "ShangHai",
"province": "ShangHai",
"country": "China"
},
"doc_as_upsert":"true"
}
根据Id删除一个文档
DELETE twitter/_doc/1
通过查询的方式删除文档
POST twitter/_delete_by_query
{
"query":{
"match":{
"user":"TL"
}
}
}
这样我们就把所有的 user 是 TL 的文档都删除了。
批处理命令 Bulk API
- 支持在一次 API 调用中,对不同的索引进行操作
- 支持四种类型操作
- Index
- Create
- Update
- Delete
- 可以在 URI 中指定 Index,也可以在请求的 Payload 中进行
- 操作中 单条 操作失败,并不会影响其他操作
- 返回结果中包括了每一条执行的结果
Bulk Index 方式批量插入文档
//千万不要添加除了换行以外的空格,否则会导致错误
POST _bulk
{"index" : {"_index" :"student" ,"_id":"1"}}
{"name":"山西太原-张三","age":"23","address":{"city":"太原","province":"山西"}}
{"index" : {"_index" :"student" ,"_id":"2"}}
{"name":"山西长治-李四","age":"24","address":{"city":"长治","province":"山西"}}
{"index" : {"_index" :"student" ,"_id":"3"}}
{"name":"山西吕梁-王五","age":"25","address":{"city":"吕梁","province":"山西"}}
{"index" : {"_index" :"student" ,"_id":"4"}}
{"name":"广东广州-赵六","age":"26","address":{"city":"广州","province":"广东"}}
使用 GET student/_count
查询刚才批量插入的文档数量
{
"count" : 4,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
}
}
Bulk create 方式批量插入文档
上面使用index创建文档,在student文档已存在的情况下,下面使用create来创建:
POST _bulk
{"create" : {"_index" :"student" ,"_id":"1"}}
{"name":"山西太原-张三","age":"23","address":{"city":"太原","province":"山西"}}
{"create" : {"_index" :"student" ,"_id":"2"}}
{"name":"山西长治-李四","age":"24","address":{"city":"长治","province":"山西"}}
{"create" : {"_index" :"student" ,"_id":"3"}}
{"name":"山西吕梁-王五","age":"25","address":{"city":"吕梁","province":"山西"}}
{"create" : {"_index" :"student" ,"_id":"4"}}
{"name":"广东广州-赵六","age":"26","address":{"city":"广州","province":"广东"}}
再次使用create创建相同的文档,会提示:
{
"create" : {
"_index" : "student",
"_type" : "_doc",
"_id" : "1",
"status" : 409,
"error" : {
//插入失败
"type" : "version_conflict_engine_exception",
"reason" : "[1]: version conflict, document already exists (current version [20])",
"index_uuid" : "hX1ecN9KQ6-dAkbCLLma-g",
"shard" : "0",
"index" : "student"
}
}
}
从上面的情况可以看出,index 总是可以成功,它可以覆盖之前的已经创建的文档。但是 create 则不行,如果插入的文档Id已经存在,就不会成功。
Bulk update 批量更新文档
POST _bulk
{"update" : {"_index" :"student" ,"_id":"1"}}
{"doc":{"name":"zs-n","age":"233"}}
{"update" : {"_index" :"student" ,"_id":"2"}}
{"name":"ls-n","age":"244","address":{"city":"太原","province":"长治"}}
通过 GET student/_doc/1
查询id为1的文档,发现已经修改成功:
{
"_index" : "student",
"_type" : "_doc",
"_id" : "1",
"_version" : 21,
"_seq_no" : 80,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "zs-n",
"age" : "233",
"address" : {
"city" : "太原",
"province" : "山西"
}
}
}
Bulk delete 批量删除文档
POST _bulk
{"delete" : {"_index" :"student" ,"_id":"1"}}
{"delete" : {"_index" :"student" ,"_id":"2"}}
{"delete" : {"_index" :"student" ,"_id":"3"}}
{"delete" : {"_index" :"student" ,"_id":"4"}}
返回结果显示已经删除成功:
{
"took" : 11,
"errors" : false,
"items" : [
{
"delete" : {
"_index" : "student",
"_type" : "_doc",
"_id" : "1",
"_version" : 22,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 81,
"_primary_term" : 1,
"status" : 200
}
},
{
"delete" : {
"_index" : "student",
"_type" : "_doc",
"_id" : "2",
"_version" : 21,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 82,
"_primary_term" : 1,
"status" : 200
}
},
{
"delete" : {
"_index" : "student",
"_type" : "_doc",
"_id" : "3",
"_version" : 21,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 83,
"_primary_term" : 1,
"status" : 200
}
},
{
"delete" : {
"_index" : "student",
"_type" : "_doc",
"_id" : "4",
"_version" : 21,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 84,
"_primary_term" : 1,
"status" : 200
}
}
]
}