上一篇说了创建索引,本文说一下数据插入。
概述
在ES中,插入分为两种:
(1)指定文档id插入
(2)自动产生文档id插入
这个和关系型数据库插入记录有点类似,主键id要么在插入时自己指定,要么让数据库按照某种策略自动生成。
在ES中,所谓文档id是指,一个唯一索引值指向我们的文档数据。
接下来我们用postman来插入我们的文档数据。
(本文出自oschina博主happybks的博文:https://my.oschina.net/happyBKs/blog/1795612)
指定文档id插入
我们在上一篇文章示例的rent索引的community类型下尝试插入一个id为1的文档。
插入的API的请求为put类型,url为http://localhost:9200/rent/community/1
其中rent为索引,community为类型,我们在rent索引的community类型下插入一个文档id为1的文档。
文档的内容,以json的形式作为请求体写入。postman选择put协议、body下选择raw,选择json格式。
输入内容:
{
"communityname":"汤城一品",
"city":"上海",
"age":10,
"creationdate":"2008-01-01"
}
点击提交,返回以下内容,插入文档成功:
注意_id就是我们指定的文档id,为1.
{
"_index": "rent",
"_type": "community",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"created": true
}
这里我们注意指定文档id的方式插入文档的几个要点,图中已经用红色标记出来,一会儿看看后面介绍自动生成文档id的方式与这个有什么不同:
我们去head插件首页看看:
在刷新以前,rent索引对应的文档数是0
我们点击【刷新】按钮。
我们可以看到docs文档数变成了1,后面括号了的2代表 包含副本的话有两个文档(别忘了我们设置了副本数为1,那么我们每插入一个文档,自然也会为其创建一个副本,所以刚才一共生成了2个文档)。
另外,索引rent的size也发生了变化。
我们再点击数据浏览标签,可以查看我们插入的文档数据。
下面我们再来看看如果在ES中插入文档数据时,让ES自动为其生成文档id。
自动生成文档id的方式插入
这里有一个非常重要的不同的地方,一定注意!!!!
当你用自动生成文档id的方式在ES中插入文档的时候,使用RESTFUL API的协议是POST!!!
(而刚才指定文档id的插入数据的方式,是引用的PUT协议)
我们使用post协议请求:http://localhost:9200/rent/community/
然后选择body的raw,json格式:
{
"communityname":"世茂滨江花园",
"city":"上海",
"age":9,
"creationdate":"2009-01-01 00:00:00"
}
提交成功,插入文档,并自动生成了文档_id。如下,自动生成的文档id是一个非数字的id。
{
"_index": "rent",
"_type": "community",
"_id": "AWLDhHMpoILHeA4gRvV7",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"created": true
}
我再把请求的三个重要要点和区别用红色标注,请比较自动生成id的方式与刚才指定id的插入方式有什么不同:
我们回到head插件刷新后看到:
rent索引的文档数量变成了2个,包含副本是4个
我们查看数据,新插入的文档也出现了,注意他两个的_id,你可以轻易看出哪一个是自动插入的,哪一个是手动指定的。
总结
这里对两种方式请求时的两个注意点和区别做个标红。
指定id插入 | 自动生成id插入 |
协议 PUT | 协议 POST |
http://localhost:9200/rent/community/1 | http://localhost:9200/rent/community/ |