定义如下mapping,并且创建索引,索引包括四个字段

有三个分片 (number_of_shards),每个分片有一个副本分片(number_of_replicas)

PUT books
{"mappings": {"properties": {"book_id": {"type": "keyword"},"name": {"type": "text"},"author": {"type": "keyword"},"intro": {"type": "text"}}},"settings": {"number_of_shards": 3,"number_of_replicas": 1}
}

ElasticSearch提供了两种新建索引的方式,一种是使用 Index API 索引文档,一种是使用 Create API 创建文档。

1、通过 Index API 索引文档

PUT books/_doc/1
{"book_id": 1,"name": "linux入门到放弃","author": "huayuanbb","intro": "test"
}

返回的数据为

{"_index" : "books","_type" : "_doc","_id" : "1","_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 3,"_primary_term" : 1
}

result 为 created 创建,且version为1,通过Index API新建的文档,如果id已经存在的情况下,多次执行,不会报错,只会将返回结果的result 变为 updated version在原来的基础上 +1.

其实在索引一个文档的时候,如果文档 ID 已经存在,会先删除旧文档,然后再写入新文档的内容,并且增加文档版本号

2、通过 create API 创建文档

通过create API 创建文档有两种方式 POST 和 PUT

POST方式

POST books/_doc
{"book_id": 1,"name": "linux入门到放弃","author": "huayuanbbsssss","intro": "test"
}

采用POST方式创建的文档,无需指定id,系统会自动生成UUID

PUT方式

PUT books/_create/2
{"book_id": 1,"name": "linux入门到放弃","author": "ss","intro": "test"
}

如上示例,使用 PUT 的方式创建文档需要指定文档的 ID,如果文档 ID 已经存在,则返回 http 状态码为 409 的错误。

总结

序号  语句 特性描述
1 PUT books/_doc/1 插入时需要指定id,且重复插入相同id的文档,只会将返回的结果中的version自增,且result改为updated,本质上是先删除,再写入,并将版本号+1
2 PUT books/_create/1 插入时同样需要指定id,但当插入相同id的文档时,会返回状态码为409的错误
3 POST books/_doc/ 不需要指定文档 ID, 系统自动生成。

上表是新建文档时 3 种写法的总结,如果你有更新文档内容的需求,应该使用第一种方式。如果写入文档时有唯一性校验需求的话,应该使用第二种方式。如果需要系统为你创建文档 ID,应该使用第三种方式。相对于第一种方式来说,第三种方式写入的效率会更高,因为不需要在库里查询文档是否已经存在,并且进行后续的删除工作

同时更新不仅仅可以通过 PUT books/_doc/1 来实现,ElasticSearch也提供了Update API来完成更新操作。

POST books/_update/2
{"doc": {"name":"时间简史(视频版)","intro": "探索时间和空间核心秘密的引人入胜的视频故事。"}
}#结果
{"_index" : "books","_type" : "_doc","_id" : "2","_version" : 3,"result" : "updated",......
}

二者间的区别是updated是在原数据上进行修改,而PUT操作是之间将原数据删除,再插入一条新纪录,且Update只指定要更新的字段即可。

除了使用指定 ID 的方式来更新数据外,还可以用 update_by_query 的方式:

POST books/_update_by_query
{"query": {"term": {"book_id": {"value": 1}}},"script": {"source": "ctx._source.name='深入Linux内核架构'","lang": "painless"}
}

执行完上述代码后,再执行 GET books/_doc/2 操作

可以发现已经修改成功了 ,脚本中 'ctx._source' 可以拿到匹配的文档的数据,所以 ctx._source.name='深入Linux内核架构' 的意思是将匹配文档的 'name' 字段的数据设置为 '深入Linux内核架构'。

需要注意的是,如果 query 中匹配的文档数量巨大,那么这个接口在 kibana 中执行的时候可能会发生超时的错误,当然你可以在请求中使用 timeout 参数,但是这个不是解决问题的有效方案。我建议你使用异步的方式进行处理,并且控制需要更新的数据量,例如按日期分批来进行更新,即在请求的URL后携带一个参数,wait_for_completion=false,其结果会返回一个task id ,再通过

GET _tasks/task_id 来查询任务的执行状态

POST books/_update_by_query?wait_for_completion=false
{"query": {"term": {"book_id": {"value": 1}}},"script": {"source": "ctx._source.name='深入Linux内核架构111'","lang": "painless"}
}{"task" : "CyKKcsubQBupaq7v4Yc_Rg:1102573"
}

关于ElasticSearch新建文档的姿势相关推荐

  1. elasticsearch 父子文档使用must not 正确姿势

    需求描述: 1.基于elasticsearch 父子文档进行子条件查询父文档 2.需要查询出子文档不存在的父文档 已知文档结构: 1.父文档clue_list 关联很多的子文档,我们用roam子文档做 ...

  2. Elasticsearch之文档document入门

    6.1. 默认自带字段解析 {"_index" : "book","_type" : "_doc","_id& ...

  3. 分布式搜索elasticsearch 索引文档的增删改查 入门

    分布式搜索elasticsearch 索引文档的增删改查 入门 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful ...

  4. Office2019 Word 新建文档豆沙绿背景色失效零时解决方案

    Office2019 Word 新建文档豆沙绿背景色失效零时解决方案 参考文章: (1)Office2019 Word 新建文档豆沙绿背景色失效零时解决方案 (2)https://www.cnblog ...

  5. elasticsearch 路由文档到分片

    路由文档到分片 当你索引一个文档,它被存储在单独一个主分片上.Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢? 进程不能是 ...

  6. 【python自动化办公01】word操作-新建文档

    点击上方"AI搞事情"关注我们 Python操作Word(Win32com)https://zhuanlan.zhihu.com/p/67543981 Office VBA 参考h ...

  7. ElasticSearch创建文档

    ElasticSearch创建文档 创建文档有两种途径 直接在XcontentBuilder构建json数据,创建文档. // 描述json 数据/** {id:xxx, title:xxx, con ...

  8. 【elasticsearch】文档 CRUD 增删改查 以及 相关 参数

    1.概述 转载:https://mp.weixin.qq.com/s/aOZnZpAC4c_dYkVW8DfNPg 在Elasticsearch中,文档(document)是所有可搜索数据的最小单位. ...

  9. WPS的新建文档的体验

    不知道别人怎么看WPS的新建文档这个操作的体验,反正我是挺不爽的.主要问题就是如果想新建一个文档,有点慢. 由于WPS将文字.表格.演示/幻灯片(PPT)三种东西都放在一个统一的界面下,导致如果你打开 ...

最新文章

  1. python 多线程和协程结合_一文讲透 “进程、线程、协程”
  2. eclipse openmp mpi并行编程例子
  3. TEA加密算法的C/C++实现
  4. st04 查看数据库日志
  5. 《斗罗大陆》引入阿里云云原生数据库 PolarDB 游戏体验更流畅
  6. vue.js:利用vue.js做一个抽奖小游戏
  7. Enterprise Blocks
  8. 一个敏捷教练成长必备的8项技能
  9. 计算机考试如何添加打印机,如何添加网络打印机?
  10. oracle怎么定位效率,oracle查询效率,该怎么解决
  11. windows下,配置apache2.4.39执行typhon生成的cgi程序
  12. 实用的签到、日程表日历控件(可扩展)
  13. HTML的简单页面加密代码
  14. 【读书笔记】《曾国藩的正面与侧面(一)》
  15. 逆战玩着玩着服务器未响应,逆战进不去一直加载,为什么玩逆战加载很久,逆战内置qt修复,逆战进入游戏加载慢,逆战卡加载:逆战没qt了【为什么我逆战进不去QT官方语音】-南开游戏网...
  16. vue生命周期和vue请求
  17. 抓取设了CSS反爬机制的大众点评数据(下)
  18. 小程序码生成及分享图绘制
  19. 如何用tkinter给你爱人画一个爱心,这满满的油腻感是怎么回事?
  20. Python爬虫:百度翻译接口获取翻译结果

热门文章

  1. 阿里三面必问JVM知识点- 使用堆外内存减少Full GC
  2. string数组转int数组
  3. 数学 {映射,函数,复合函数,结合函数,反函数}
  4. 数字城市与智慧城市的创建,数字化大数据技术的应用
  5. steam api接口 php,api.php · FsTeam/tanghuayan - Gitee.com
  6. 如何通过手机号获得对应的省份
  7. 使用宽带路由器方式共享上网频繁掉线
  8. 我该怎样度此生?——认真并干净地生活
  9. [转]计算机科学与技术学习心得
  10. 一文带你详细了解浏览器安全