es查询字段更新记录_ElasticSearch查询 第二篇:文档更新

《ElasticSearch查询》目录导航:

ElasticSearch是性能优化的分布式全文搜索引擎,存储数据的载体是文档(Document),它的优势在于搜索速度快和支持聚合操作,在更新文档时,基本上能够达到实时搜索。ElasticSearch引擎总是按照文档标识来更新数据,并发控制是通过顺序的版本ID(version)实现的,控制写-写、写-读冲突,实现数据弱一致性。

在ElasticSearch引擎中,索引定义了文档的逻辑存储,索引是由段(Segment)组成的,段不是实时更新的,这意味着,在建立索引时,一个段写入磁盘后,就不再被更新。被删除文档的信息存储在一个单独的文件中,在搜索数据时,ElasticSearch首先从段中查询,再从查询结果中过滤被删除的文档,这意味着,段中存储”未被删除文档“的密度降低。多个段可以通过段合并(Segment Merge)操作把“已删除”的文档将从段中物理删除,将未删除的文档合并成一个新段,新段中没有”已删除文档“,因此,段合并操作能够提高索引的查找速度,但段合并是IO密集型的,需要消耗大量的IO操作。

一旦数据存储在倒排索引中,就不能被修改,因此,更新文档是一项复杂的任务。在内部,ElasticSearch引擎必须首先获取文档(从_source属性中获得数据),删除旧的文档,更新_source属性,然后重新索引该文档,使之可被搜索到,就是说,文档更新的流程,实际上是先标记文档被删除,后插入新的文档,最后将新文档编入索引。

数据的更新,主要是通过_update端点,编写内嵌脚本(inline script)来实现。默认的脚本语言是Groovy,Groovy是内置的脚本语言,不需要安装,默认是禁用的,在未启用动态脚本的结点上执行脚本更新,ElasticSearch引擎将会抛出异常消息:

scripts of type [inline], operation [update] and lang [groovy] are disabled

要启用脚本更新,必须修改每个节点(node)的全局配置文件 config/elasticsearch.yml,添加配置选项:

script.inline: truescript.indexed:true

一,编入索引(Index Data)

索引API用于将一个类型化的JSON结构添加到一个索引中,或者更新索引中的一个文档,使之能够被搜索到。

1,使用文档标识编入索引

在把文档编入索引时,如果在API中显式提供文档的标识(_id),那么ElasticSearch引擎使用Upsert(更新或增加)方式更新索引,这意味着,如果索引中已经存在相同ID的文档,那么ElasticSearch更新该文档(实际上是先删除,后添加);如果索引中不存在相同I

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值