ES系列--文档处理

这篇具有很好参考价值的文章主要介绍了ES系列--文档处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、文档冲突

        当我们使用 index API 更新文档 ,可以一次性读取原始文档,做我们的修改,然后重 新索引 整个文档 。 最近的索引请求将获胜:无论最后哪一个文档被索引,都将被唯一存 储在 Elasticsearch 中。如果其他人同时更改这个文档,他们的更改将丢失。

        很多时候这是没有问题的。或者对于我们的业务来说偶尔丢失更改并不是很严重的问题。但有时丢失了一个变更就是 非常严重的 。比如:库存的扣减(虽然目前很多库存的扣减都是使用redis实现),如果丢失将会发生超卖的现象。

        变更越频繁,读数据和更新数据的间隙越长,也就越可能丢失变更。

在数据库领域中,有两种方法通常被用来确保并发更新时变更不会丢失:

一、悲观并发控制 

        它假定有变更冲突可能发生,因此阻塞访问资源以 防止冲突。 一个典型的例子是读取一行数据之前先将其锁住,确保只有放置锁的线程能够 对这行数据进行修改。

二、乐观并发控制

        Elasticsearch 中使用的这种方法假定冲突是不可能发生的,并且不会阻塞正在尝试的操 作。 然而,如果源数据在读写当中被修改,更新将会失败。应用程序接下来将决定该如何 解决冲突。 例如,可以重试更新、使用新的数据、或者将相关情况报告给用户。

二、乐观并发控制 

        Elasticsearch 是分布式的。当文档创建、更新或删除时, 新版本的文档必须复制到集 群中的其他节点。Elasticsearch 也是异步和并发的,这意味着这些复制请求被并行发送,并 且到达目的地时也许 顺序是乱的 。如果更改数据,就会产生旧版本覆盖新版本的可能。

        当我们之前讨论 index ,GET 和 delete 请求时,我们指出每个文档都有一个 _version (版本)号,当文档被修改时版本号递增。 Elasticsearch 使用这个 version 号来确保变更 以正确顺序得到执行。如果旧版本的文档在新版本之后到达,它可以被简单的忽略。就有点类似于mysql的乐观锁控制。

        我们可以利用 version 号来确保 应用中相互冲突的变更不会导致数据丢失。我们通过 指定想要修改文档的 version 号来达到这个目的。 如果该版本不是当前版本号,我们的请 求将会失败。

        老的版本 es 使用 version,但是新版本不支持了,会报下面的错误,提示我们用 if_seq_no 和 if_primary_term

{
    "error": {
        "root_cause": [{
            "type": "action_request_validation_exception",
            "reason": "Validation Failed: 1: internal versioning can not be used for optimistic concurrency control. Please use `if_seq_no` and `if_primary_term` instead;"
        }],
        "type": "action_request_validation_exception",
        "reason": "Validation Failed: 1: internal versioning can not be used for optimistic concurrency control. Please use `if_seq_no` and `if_primary_term` instead;"
    },
    "status": 400
}

如果想使用version,可以中通过增加 version_type=external来进行使用。

ES系列--文档处理,ElastricSearch,elasticsearch,搜索引擎

 文章来源地址https://www.toymoban.com/news/detail-590035.html

到了这里,关于ES系列--文档处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch文档操作[ES系列] - 第502篇

    历史文章( 文章 累计500+) 《 国内最全的Spring Boot系列之一 》 《 国内最全的Spring Boot系列之二 》 《 国内最全的Spring Boot系列之三 》 《 国内最全的Spring Boot系列之四 》 《 国内最全的Spring Boot系列之 五 》 《 国内最全的Spring Boot系列之六 》 《 国内最全的Spring Boot系列

    2024年03月23日
    浏览(38)
  • ES系列--文档处理

            当我们使用 index API 更新文档 ,可以一次性读取原始文档,做我们的修改,然后重 新索引 整个文档 。 最近的索引请求将获胜:无论最后哪一个文档被索引,都将被唯一存 储在 Elasticsearch 中。如果其他人同时更改这个文档,他们的更改将丢失。         很多

    2024年02月16日
    浏览(34)
  • ElasticSearch第五讲 ES nested嵌套文档与父子文档处理

    在ES中,处理实体之间的关系并不像关系型存储那样明显。在关系数据库中的黄金准则 - 数据规范化,在ES中并不适用。在处理关联关系,嵌套对象和父子关联关系中,我们会讨论几种可行方案的优点和缺点。 紧接着在为可扩展性而设计中,我们会讨论ES提供的一些用来快速灵

    2024年02月02日
    浏览(44)
  • ElasticSearch系列 - SpringBoot整合ES:查询字段不为空的文档 exists

    1. ElasticSearch exists 查询是什么 在某些场景下,我们希望找到某个字段不为空的文档,则可以用exists搜索。字段不为空的条件有: 值存在且不是 null; 值不是空数组; 值是数组,但不是 [null] 例如,查询在字段中至少有一个非空值的文档: 这些文档都将匹配上面的查询: ①

    2024年02月06日
    浏览(74)
  • ElasticSearch内容分享(四):ES搜索引擎

    目录 ES搜索引擎 1. DSL设置查询条件 1.1 DSL查询分类 1.2 全文检索查询 1.2.1 使用场景 1.2.2 match查询 1.2.3 mulit_match查询 1.3 精准查询 1.3.1 term查询 1.3.2 range查询 1.4 地理坐标查询 1.4.1 矩形范围查询 1.4.2 附近(圆形)查询 1.5 复合查询 1.5.0 复合查询归纳 1.5.1 相关性算分 1.5.2 算分函数查

    2024年02月05日
    浏览(51)
  • 微服务分布式搜索引擎 ElasticSearch 查询文档

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 ElasticSearch 的查询依然是基于 JSON风格的DSL 来实现的。 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的

    2023年04月15日
    浏览(47)
  • 分布式搜索引擎ElasticSearch的RestClient查询文档

         

    2024年02月12日
    浏览(62)
  • 入门ElasticSearch :为什么选择ES作为搜索引擎?

    随着数据量的不断增长,搜索和分析大规模数据集变得越来越重要。传统数据库在面对这种需求时往往表现不佳,这时候就需要一种专门用于搜索和分析的引擎。ElasticSearch (简称ES)就是这样一款强大的搜索引擎,它具有许多优势,使得它成为许多企业和开发者的首选。 简

    2024年02月09日
    浏览(48)
  • elasticsearch(ES)分布式搜索引擎04——(数据聚合,自动补全,数据同步,ES集群)

    **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近

    2024年02月08日
    浏览(51)
  • 搜索引擎elasticsearch :安装elasticsearch (包含安装组件kibana、IK分词器、部署es集群)

    kibana可以帮助我们方便地编写DSL语句,所以还要装kibana 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: 这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。 课前资料提供了镜像的tar包: 大家将

    2024年02月16日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包