上一节我们了解了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