ES学习3-文档管理

  1. 索引文档(Index)
  2. 查询文档
  3. 删除文档
  4. 更新文档
  5. 批量操作
  6. 参考资料

上一节我们了解了ES的索引管理。当我们建立好索引后,就可以往索引中添加文档记录,也可以更新、删除索引中的文档记录。这一节我们来快速了解如何管理ES中的文档。

先初始化一个索引,比如维护员工信息的索引employee:

PUT /employee
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      }
      "address": {
        "type": "text"
      }
    }
  }
}

索引文档(Index)

将文档添加进索引的语法有多种:

PUT /<target>/_doc/<_id>   // 指定id插入(或更新)

POST /<target>/_doc/      // 不指定id插入(或更新)

PUT /<target>/_create/<_id>  // 当id不存在时候插入

POST /<target>/_create/<_id> // 当id不存在时候插入

例如:

PUT /employee/_doc/1
{
  "name":"duval",
  "age": 30,
  "address": "北京市朝阳区朝阳公园南路十九号"
}

查询文档

将上述id=1的文档查询出来:

GET /employee/_doc/1

// response -> 
{
  "_index" : "employee",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "duval",
    "age" : 30,
    "address" : "北京市朝阳区朝阳公园南路十九号"
  }
}

删除文档

将上述id=1的文档删除:

DELETE /employee/_doc/1

除了根据id来删除,也可以根据查询条件来删除文档:

POST /employee/_delete_by_query
{
  "query": {
    "match": {
      "name": "duval"
    }
  }
}

更新文档

可以直接使用索引文档的方式进行数据更新:

PUT /<target>/_doc/<_id>   // 指定id插入(或更新)

POST /<target>/_doc/      // 不指定id插入(或更新)

也可以通过使用Update Api通过指定脚本更新。比如将id为1的文档的年龄字段递增1:

POST employee/_update/1
{
  "script" : {
    "source": "ctx._source.age += params.inc",
    "lang": "painless",
    "params" : {
      "inc" : 1
    }
  }
}

也可以新增或更新部分字段,例如:更新name字段并插入一个新的title字段。

POST employee/_update/1
{
  "doc": {
    "name":"duval1024",   
    "title":"研发工程师"
  }
}

另外也支持upsert操作,更多使用方法见:Update API

批量操作

相比单个,批量的效率会更加高。语法如下:

POST /_bulk

POST /<target>/_bulk

例如索引多个新文档:

POST _bulk
{ "index" : { "_index" : "employee", "_id" : "2" } }
{"name" : "john", "age" : 28,  "address" :"广州市白云区黄石路119号"}
{ "index" : { "_index" : "employee", "_id" : "3" } }
{ "name" : "tom", "age" : 35,  "address" :"杭州市滨江区网商路299号"}

批量操作还支持其他更多命令,详见:Bulk API

参考资料

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 duval1024@gmail.com

×

喜欢就点赞,疼爱就打赏