Elasticsearch教程(7) 文档-Index API
Elasticsearch文档-Index API
·
Elasticsearch文档-Index API
1 Index API简介
Index API可以把JSON文档新增或修改到指定的索引(Index)中,从而使该JSON文档能够被搜索到。下面举例在一个叫"dept"的索引(Index)中, 新增一个id为1的部门数据。
PUT /dept/_doc/1
{
"name": "部门1",
"code": "dept1"
}
上述操作结果如下:
{
"_index" : "dept",//index的名称是dept
"_type" : "_doc",//type的名称是_doc
"_id" : "1",//指定id为1
"_version" : 1,//数据版本号,如果上面put语句再执行一次,_version会+1
"result" : "created",//created表明是新增操作,如果上面put语句再执行一次,就会是updated,表明是修改
"_shards" : {
"total" : 2,//表明应该有多少分片(包括主分片和副本分片)执行索引,这里2表明应该有一个主分片和一个副本分片
"successful" : 1,//这里是1,因为我本机就启动了一个es节点,无有效的副本分片,只有1个主分片成功
"failed" : 0//在副本分片上操作失败的数量,这里我本机没有副本分片,所以每一去在副本分片上操作,所以是0
},
"_seq_no" : 0,
"_primary_term" : 1
}
查询上面新增的数据
GET /dept/_doc/1
返回数据如下:
{
"_index" : "dept",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "部门1",
"code" : "dept1"
}
}
2 操作类型
先说说ES里索引(index)这个概念,如果按照名词理解,它就是上面例子说的“dept”,相当于MySQL里的表名。如果按动词理解,就是上面的PUT操作,把数据索引(动词)到dept索引(名词)中。
| index | 解释 |
|---|---|
| 名词 | 相当于MySQL里的表名 |
| 动词 | 就是把数据保存到ES中 |
上面的索引(动词)操作也可接收一个op_type参数,可以指定op_type=create,表明这是新增数据操作,如果该数据(相同ID的数据)已经存在,则会保存失败。
PUT /dept/_doc/1?op_type=create
{
"name": "部门1",
"code": "dept1"
}
因为id=1的数据已经存在,所以会有document already exists这样提示的错误。
3 自生成ID
如果保存数据时,没有指定ID,而是希望ES自动生成ID,则可以用POST,此时默认为新增文档。
POST /dept/_doc/
{
"name": "部门1",
"code": "dept1"
}
查询所有数据,发现有2条数据,其中一个_id很长的是ES自生成的ID
"hits" : {
"total" : 2,
"max_score" : 1.0,
"hits" : [
{
"_index" : "dept",
"_type" : "_doc",
"_id" : "ciX_F28BLvC92eI0mEsx",
"_score" : 1.0,
"_source" : {
"name" : "部门1",
"code" : "dept1"
}
},
{
"_index" : "dept",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "部门1",
"code" : "dept1"
}
}
]
}
4 比较PUT和POST

5 获取文档和判断是否已经存在
GET pigg_blog/_doc/1
只获取_source
GET pigg_blog/_source/1
判断文档是否存在
HEAD pigg_blog/_doc/1
HEAD pigg_blog/_source/1
6 store属性的使用
创建一个index,设置name的store是true,那么name会在_source内和_source外都会保存一份,在_source外只是保存name的原始值。
PUT pigg_test_store
{
"mappings": {
"properties": {
"name": {
"type": "keyword",
"store": true
},
"age": {
"type": "integer"
},
"address": {
"type": "text"
}
}
}
}
插入数据
PUT pigg_test_store/_doc/1
{
"name": ["王石", "王磊"],
"age": 33,
"address": "江苏盐城盐都区"
}
查询数据
GET pigg_test_store/_doc/1?_source=true&stored_fields=name,age,address
返回如下:
{
"_index" : "pigg_test_store",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 9,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : [
"王石",
"王磊"
],
"age" : 33,
"address" : "江苏盐城盐都区"
},
"fields" : {
"name" : [
"王石",
"王磊"
]
}
}
可以先参考Elasticsearch教程(一) DSL语句,学到update API时再整理详细内容。
更多推荐



所有评论(0)