在上一章介绍了映射的使用,有兴趣的朋友可以参考一下
elasticSearch核心概念的介绍(二):映射的介绍和使用
这一章我们来简单介绍 一下 文档的使用,在es中文档也就是指的数据,如同mysql中的表数据。
新增文档
请求
curl -X PUT "http://172.25.45.150:9200/nba/_doc/1" -H 'Content-Type:application/json' -d '
{
"name":"哈登",
"team_name":"火箭",
"position":"得分后卫",
"play_year":"10",
"jerse_no":"13"
}
'
http://172.25.45.150:9200/nba/_doc/1 1:为id 我们可以自行指定,我们也可以不指定id进行创建
http://172.25.45.150:9200/nba/_doc 不指定id的话 为POST请求
响应
{
"_index": "nba",
"_type": "_doc",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
获取文档信息
请求
curl -X GET "http://172.25.45.150:9200/nba/_doc/1"
响应
{
"_index": "nba",
"_type": "_doc",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"name": "哈登",
"team_name": "火箭",
"position": "得分后卫",
"play_year": "10",
"jerse_no": "13"
}
}
自动创建索引
查看auto_create_index 开关状态
请求
curl -X GET "http://172.25.45.150:9200/_cluster/settings"
响应:
{
"persistent": {
"action": {
"destructive_requires_name": "true"
}
},
"transient": {}
}
当索引不存在并且auto_create_index为true的时候,新增文档的时候如果不存在该索引就会自动创建索引
修改auto_create_index状态
请求
curl -X PUT "http://172.25.45.150:9200/_cluster/settings" -H 'Content-Type:application/json' -d '
{
"persistent":{
"action.auto_create_index":false
}
}
'
响应
{
"acknowledged": true,
"persistent": {
"action": {
"auto_create_index": "false"
}
},
"transient": {}
}
修改之后再次进行 curl -X GET “http://172.25.45.150:9200/_cluster/settings” 会发现多了一条auto_create_index=false的字段。
当auto_create_index=false时新增一个不存在索引的文档。
请求
curl -X PUT "http://172.25.45.150:9200/wnba/_doc/1" -H 'Content-Type:application/json' -d '
{
"name":"杨超越",
"team_name":"梦之队",
"position":"组织后卫",
"play_year":"0",
"jerse_no":"18"
}
'
响应
{
"error": {
"root_cause": [
{
"type": "index_not_found_exception",
"reason": "no such index [wnba]",
"resource.type": "index_expression",
"resource.id": "wnba",
"index_uuid": "_na_",
"index": "wnba"
}
],
"type": "index_not_found_exception",
"reason": "no such index [wnba]",
"resource.type": "index_expression",
"resource.id": "wnba",
"index_uuid": "_na_",
"index": "wnba"
},
"status": 404
}
将auto_create_index设置为true,我们再来试试创建文档
响应
{
"_index": "wnba",
"_type": "_doc",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
会发现wnba的索引会帮我们创建,同时mapping也会根据文档信息帮我们自动创建 ,我们来试一下
请求
curl -X GET "http://172.25.45.150:9200/wnba/_mapping"
响应
{
"wnba": {
"mappings": {
"properties": {
"jerse_no": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"play_year": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"position": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"team_name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
查看多个文档
请求一
curl -X POST "http://172.25.45.150:9200/_mget" -H 'Content-Type:application/json' -d '
{
"docs":[
{
"_index":"nba",
"_type":"_doc",
"_id":"1"
},
{
"_index":"nba",
"_type":"_doc",
"_id":"2"
}
]
}
'
请求二
curl -X POST "http://172.25.45.150:9200/nba/_mget" -H 'Content-Type:application/json' -d '
{
"docs":[
{
"_type":"_doc",
"_id":"1"
},
{
"_type":"_doc",
"_id":"2"
}
]
}
'
请求三
curl -X POST "http://172.25.45.150:9200/nba/_doc/_mget" -H 'Content-Type:application/json' -d '
{
"docs":[
{
"_id":"1"
},
{
"_id":"2"
}
]
}
'
请求四
curl -X POST "http://172.25.45.150:9200/nba/_doc/_mget" -H 'Content-Type:application/json' -d '
{
"ids":["1","2"]
}
'
响应
{
"docs": [
{
"_index": "nba",
"_type": "_doc",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"name": "哈登",
"team_name": "火箭",
"position": "得分后卫",
"play_year": "10",
"jerse_no": "13"
}
},
{
"_index": "nba",
"_type": "_doc",
"_id": "2",
"found": false
}
]
}
修改文档
根据提供的文档片段更新数据
请求
curl -X POST "http://172.25.45.150:9200/nba/_update/1" -H 'Content-Type:application' -d '
{
"doc":{
"name":"哈登",
"team_name":"火箭",
"position":"双能卫",
"play_year":"10",
"jerse_no":"13"
}
}
'
响应
{
"_index": "nba",
"_type": "_doc",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 2,
"_primary_term": 1
}
删除文档
请求
curl -X DELETE "http://172.25.45.150:9200/nba/_doc/22"
响应
{
"_index": "nba",
"_type": "_doc",
"_id": "22",
"_version": 3,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 10,
"_primary_term": 1
}
_source 字段
在上面请求文档数据的时候我们会发现,我们需要的数据存放在_source的字段下面,_source他是作为一个载体,我们如果需要修改一些字段的信息,也可以通过_srouce去操作
新增一个字段(age)
请求
curl -X POST "http://172.25.450.156:9200/nba/_update/1" -H 'Content-Type:application/json' -d '
{
"script" : "ctx._source.age=18"
}
'
响应
{
"_index": "nba",
"_type": "_doc",
"_id": "1",
"_version": 3,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 3,
"_primary_term": 1
}
新增成功之后,再通过
curl -X GET “http://172.25.45.150:9200/nba/_doc/1”
就会发现_srouce下面多了一个age字段
删除一个字段
请求
curl -X POST "http://172.25.450.156:9200/nba/_update/1" -H 'Content-Type:application/json' -d '
{
"script" : "ctx._source.remove("age")"
}
'
响应
{
"_index": "nba",
"_type": "_doc",
"_id": "1",
"_version": 4,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 4,
"_primary_term": 1
}
修改字段
请求
curl -X POST "http://172.25.450.156:9200/nba/_update/1" -H 'Content-Type:application/json' -d '
{
"script":{
"source":"ctx._source.age += params.age",
"params":{
"age":4
}
}
'
响应
{
"_index": "nba",
"_type": "_doc",
"_id": "1",
"_version": 7,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 7,
"_primary_term": 1
}
修改不存在的文档字段
请求
curl -X POST "http://172.25.450.156:9200/nba/_update/22" -H 'Content-Type:application/json' -d '
{
"script":{
"source":"ctx._source.age += params.allstart",
"params":{
"allstart":4
}
},
"upsert":{
"allstart":1
}
}
'
请求说明:
upsert: 当指定的文档不存在时,upsert参数包含的内容将会被插入到索引中,作为一个新文档;如果指定的文档存在,ElasticSearch引擎将会执行指定的更新逻辑(script),通过在创建该文档的数据同事,会更新同步mapping的对应属性。
响应
{
"_index": "nba",
"_type": "_doc",
"_id": "22",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 9,
"_primary_term": 1
}



