首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Elasticsearch删除具有特定日期时间的所有嵌套对象

基础概念

Elasticsearch 是一个基于 Lucene 的分布式搜索和分析引擎,它提供了一个 RESTful API 来进行数据索引、搜索、分析和可视化。Elasticsearch 中的数据结构包括文档(document)、映射(mapping)和索引(index)。嵌套对象(nested objects)是 Elasticsearch 中的一种数据结构,允许在一个文档中存储多层级的 JSON 对象。

相关优势

  1. 分布式架构:Elasticsearch 可以在多个节点上分布数据,提供高可用性和可扩展性。
  2. 全文搜索:支持复杂的全文搜索和分析功能。
  3. 实时性:数据索引后可以立即进行搜索和分析。
  4. 灵活性:支持多种数据类型和嵌套对象。

类型

Elasticsearch 中的嵌套对象是一种特殊的数据类型,允许在一个文档中存储多层级的 JSON 对象。嵌套对象在索引时会被视为独立的文档进行处理,但在查询时可以作为一个整体进行访问。

应用场景

嵌套对象常用于以下场景:

  • 复杂数据结构:当数据具有复杂的层级关系时,嵌套对象可以更好地表示这些关系。
  • 父子关系:例如,订单和订单项之间的关系。

删除具有特定日期时间的所有嵌套对象

假设我们有一个包含嵌套对象的索引 my_index,其中每个文档包含一个嵌套对象数组 events,每个 event 包含一个 timestamp 字段。我们需要删除所有 timestamp 在特定日期时间之后的 event

示例数据

代码语言:txt
复制
{
  "id": 1,
  "events": [
    {
      "timestamp": "2023-01-01T12:00:00Z",
      "type": "login"
    },
    {
      "timestamp": "2023-01-02T12:00:00Z",
      "type": "logout"
    }
  ]
}

删除操作

我们可以使用 Elasticsearch 的 _update_by_query API 来删除符合条件的嵌套对象。以下是一个示例请求:

代码语言:txt
复制
POST /my_index/_update_by_query
{
  "script": {
    "source": """
      for (def event : ctx._source.events) {
        if (event.timestamp > params.target_timestamp) {
          ctx._source.events.remove(event);
        }
      }
    """,
    "params": {
      "target_timestamp": "2023-01-02T00:00:00Z"
    }
  },
  "query": {
    "nested": {
      "path": "events",
      "query": {
        "range": {
          "events.timestamp": {
            "gt": "2023-01-02T00:00:00Z"
          }
        }
      }
    }
  }
}

解释

  1. _update_by_query API:用于对符合条件的文档进行更新操作。
  2. script:使用 Painless 脚本语言来遍历 events 数组,并删除符合条件的 event
  3. params:传递目标时间戳参数。
  4. query:使用 nested 查询来指定嵌套路径,并使用 range 查询来筛选出 timestamp 大于指定值的 event

参考链接

通过上述操作,你可以删除 Elasticsearch 中具有特定日期时间的所有嵌套对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【ES三周年】elasticsearch 核心概念

字段具有类型:每个字段都具有一个类型,用于确定字段值数据类型。常见字段类型包括字符串、数字、日期等。elasticsearch 还支持嵌套字段和地理位置字段等。...字段可以是嵌套elasticsearch字段可以是嵌套嵌套字段可以在一个文档中包含另一个文档,形成类似于嵌套对象结构。...字段类型可以是基本类型,例如字符串、数字、日期、布尔等,也可以是复杂类型,例如对象、数组、嵌套对象等。映射还可以定义分析器(Analyzer),用于在索引和搜索时对文本进行分词和过滤。...Term Query:术语查询用于搜索包含特定术语字段。它不会对输入术语进行分词或归一化。Range Query:范围查询用于搜索包含在特定范围内数值或日期字段。...Date Histogram Aggregation:日期直方图聚合用于按时间段分组文档集合。例如,将文档按月、周、日等时间段进行分组。

3.1K80

Elasticsearch:提升 Elasticsearch 性能

避免嵌套类型:与父文档中字段相比,对嵌套字段查询速度较慢,并且检索匹配嵌套字段也会进一步降低速度。...如果你查询具有日期范围过滤器,则按日期组织数据:对于日志记录或监控场景,按每日、每周或每月组织索引并获取指定日期范围索引列表有助于提高性能。...扩展如果你查询具有日期范围过滤器,则按日期组织数据:对于大多数日志记录或监控场景,按每日、每周或每月组织索引并获取指定日期范围索引列表有助于提高性能。...搜索性能:请求延迟和速率 - 跟踪搜索请求延迟和每秒搜索请求数量。索引性能:刷新时间和合并时间 - 监控刷新索引所需时间和合并段所需时间。...,你可以确保你 Elasticsearch 部署具有高性能、可靠性和可扩展性。

18210
  • 【ES三周年】elasticsearch 其他字段类型详解和范例

    elasticsearch嵌套类型详解 嵌套类型用于在 Elasticsearch 文档中表示对象数组,它允许您对数组中对象进行独立查询和过滤。...:使用嵌套类型时,可以将多个对象作为数组索引到 Elasticsearch 中。...,利用嵌套字段进行筛选查询时,必须两个字段值都要符合条件,如果其中一个字段值不满足查询条件,则从索引库中查询不到任何数据,执行结果如图所示: 图片 嵌套类型在处理具有复杂关系文档时非常有用。...使用嵌套类型,可以在 Elasticsearch 中更有效地查询和过滤对象数组,并获取所需详细信息。...ip_range 表示IPv4或IPv6地址一系列IP值 范围类型主要应用场景是对某个范围内值进行查询和过滤。例如,查找生产日期特定日期范围内商品,或者查找价格在特定范围内房屋等。

    3.3K10

    干货 | Elasticsearch5.X Mapping万能模板

    2.3 日期类型选型 { "date": "2015-01-01" } { "date": "2015-01-01T12:10:30Z" } { "date": 1420070400001 } 如上,日期类型或者时间戳类型...2.7 数组类型选型 2.7.1 Array数组类型选型 在Elasticsearch中,没有专门数组类型。 默认情况下,任何字段都可以包含零个或多个值,但是数组中所有值必须是相同数据类型。...2.7.2 Object对象类型 JSON文档本质上是分层:存储类似json具有层级数据,文档可能包含内部对象,而内部对象又可能包含其他内部对象。...2.7.3 nested嵌套类型 nested嵌套类型是Object数据类型特定版本,允许对象数组彼此独立地进行索引和查询。...每一个嵌套文档都是嵌套字段(文档数组)一个元素。 嵌套文档内部字段之间关联被ElasticSearch引擎保留,而嵌套文档之间是相互独立

    3K130

    Elasticsearch索引之嵌套类型:深度剖析与实战应用

    Elasticsearch中,嵌套类型索引是一个非常重要功能,它允许我们处理具有一对多关系复杂数据结构。...二、nested 类型与object 类型不同点 嵌套对象(nested object)相较于普通对象(object)类型,在Elasticsearch具有独特特点和功能。...特征: 字段相关性保留:每个嵌套对象被独立索引后,能够确保对象中字段间相关性不被破坏。这意味着在进行查询时,可以精确地找到满足条件特定嵌套对象。...若需对嵌套对象进行修改(增加、删除或更改),则必须对整个父文档进行重新索引。值得注意是,查询时返回是包含匹配嵌套对象整个父文档,而非单独嵌套文档。...这种方法可以提供更大灵活性,但需要在应用程序中实现额外逻辑来处理关联数据。 结语 Elasticsearch嵌套索引是一个强大功能,允许你处理具有一对多关系复杂数据结构。

    47310

    (二)、Elasticsearch-基本单元

    Type(类型):类型是一组具有相似特征文档集合,类似于关系型数据库中表中“类型”概念。...Document(文档):文档是一个JSON格式数据单元,代表了一个数据实例,也是所有可搜索数据最小单位,例如一篇文章、一条新闻或一条订单等。...Date 日期,用于存储日期时间数据,支持日期范围查询和日期聚合操作。 Boolean 布尔,用于存储布尔值,支持精确匹配和过滤操作。...Object 对象,用于存储嵌套复杂对象,可以包含多个子字段。 Nested 嵌套,用于存储嵌套文档,支持独立查询和嵌套查询。..._index:文档所属索引名 _type:文档所属类型名 _id:文档唯一ID _source:文档原始JSON数据 _all:整合所有字段内容到该字段,已被废除 _version:文档版本信息

    22140

    ElasticSearch 四种字段类型详解(周末加油站

    ElasticSearch 索引基本操作 ElasticSearch 文档添加、获取以及更新 ElasticSearch 文档删除和批量操作 ElasticSearch 文档路由,你数据到底存在哪一个分片上...es 内部将时间转为 UTC,然后将时间按照 millseconds-since-the-epoch 长整型来存储。...} } } } 这个能够解析出来时间格式比较多。...添加数组是,数组中第一个元素决定了整个数组类型。 10.2.2 对象类型(object) 由于 JSON 本身具有层级关系,所以文档包含内部对象。内部对象中,还可以再包含内部对象。...此时可以 nested 类型来解决问题,nested 对象类型可以保持数组中每个对象独立性。nested 类型将数组中每一饿对象作为独立隐藏文档来索引,这样每一个嵌套对象都可以独立被索引。

    1.1K30

    Elasticsearch入门指南:构建强大搜索引擎(上篇)

    它是以JSON格式表示结构化数据对象。文档可以是任何类型数据,例如产品信息、用户记录、日志条目等。每个文档在索引中具有唯一ID,用于标识和检索它。 字段(Field):字段是文档中具体数据项。...它是由字段名称和相应值组成。字段可以是各种类型,如字符串、数字、日期、布尔值等。在Elasticsearch中,字段被动态映射为特定类型,也可以手动指定映射。...您可以执行针对特定父文档或子文档查询,并根据关联关系来过滤结果。 父子关系限制: 父子文档关系在设计上具有一些限制。...例如,子文档和父文档必须位于同一个索引中,并且父子关系字段必须具有相同数据类型。此外,父文档和子文档之间索引和删除操作需要进行同步,以保持数据一致性。...相反,Elasticsearch 鼓励使用内嵌文档或嵌套对象来表示层次结构数据,以获得更好性能和查询灵活性。

    41120

    ElasticSearch 6.x 学习笔记:12.字段类型

    date范围类型range二进制类型binary复合类型数组类型array对象类型object嵌套类型nested地理类型地理坐标类型geo_point地理地图geo_shape特殊类型IP类型ip范围类型...这个计时系统被所有的UNIX和类UNIX系统继承了下来, 而且影响了许多非UNIX系统....,epoch就是指UNIX诞生UTC时间1970年1月1日0时0分0秒) (3)integer秒数(seconds-since-the-epoch) ElasticSearch 内部会将日期数据转换为...”, “age”: 10 }],ElasticSearch内部把对象数组展开为 {“user.name”: [“Mary”, “John”], “user.age”: [12,10]} 12.8 object...类型 JSON天生具有层级关系,文档会包含嵌套对象 DELETE test PUT test PUT test/my/1 { "employee":{ "age":30, "fullname

    51220

    Spring认证中国教育管理中心-Spring Data Elasticsearch教程一

    Elasticsearch 对象映射 Spring Data Elasticsearch 对象映射是将 Java 对象(域实体)映射到存储在 Elasticsearch 中并返回 JSON 表示过程...使用 MappingElasticsearchConverternow 涵盖了所有这些情况。 6.1。元模型对象映射 基于元模型方法使用域类型信息来读取/写入 Elasticsearch。...这允许Converter为特定域类型映射注册实例。 6.1.1.映射注释概述 在 MappingElasticsearchConverter使用元数据驱动对象映射文件。...日期格式映射 派生自TemporalAccessor或属于类型属性java.util.Date必须具有@Field类型注释,FieldType.Date或者必须为此类型注册自定义转换器。...AFieldNamingStrategy适用于所有实体;可以通过@Field在属性上设置特定名称来覆盖它。

    68210

    Elasticsearch 高级操作-映射(一)

    映射作用映射可以用于以下几个方面:定义字段类型:在Elasticsearch中,每个字段都必须有一个类型。映射可以用于指定字段类型,例如文本类型、数值类型、日期类型等。...指定字段分析器:Elasticsearch使用分析器对文本进行分词和处理。映射可以指定哪些字段需要使用哪种分析器。控制字段索引:Elasticsearch默认对所有字段进行索引。...日期类型(date):用于存储日期时间数据。布尔类型(boolean):用于存储布尔值。二进制类型(binary):用于存储二进制数据。...特殊类型(object、nested和completion):用于存储结构化数据、嵌套对象和自动完成字段。...price字段是浮点数类型,用于存储商品价格。is_available字段是布尔类型,用于指示商品是否可用。created_at字段是日期类型,用于存储商品创建时间

    37110

    ElasticSearch-7.10 参考手册

    较小段会定期合并为较大段,合并期间会删除 被标记为删除对象, 减少段数量是有意,会减少打开文件句柄,同时查询索引会更快。...所有的索引和删除操作在被内部索引处理之后但在它们被确认之前被写入translog。在崩溃情况下,当shard恢复时,可以从translog中恢复。...并且只能对应一个字段,不能对应多个 2.在创建别名时,字段field必须同时存在 3.如果定义了嵌套对象,字段别名必须与其目标具有相同嵌套范围 4.不能应用在索引和更新api上 v object...将整个json对象解析出其字段值作为关键词,并设置为文档字段值,在索引期间不会对value 值进行分析和特殊处理例如日期,这样json对象就可以被搜索和聚合。...嵌套对象: index.mapping.nested_fields.limit 指定嵌套字段个数,默认50个 index.mapping.nested_objects.limit 嵌套对象个数 默认

    5.5K10

    Elasticsearch专栏 08】深入探索:ElasticsearchRouting机制详解

    通过指定路由值,可以确保具有相同路由值文档被放置在相同分片上。这对于某些用例(如确保特定用户所有数据都存储在同一个分片上)非常有用。...可能希望将特定时间范围内文档存储在同一个分片上,以便进行更高效时间范围查询。...然而,需要注意是,父/子关系在Elasticsearch 7.x版本之后已被弃用,并在后续版本中完全删除。...因此,对于新应用程序,建议使用其他方法来模拟父/子关系(如使用嵌套对象或单独关联索引)。...04 Routing注意事项 路由一致性:一旦为文档指定了路由值(无论是通过请求参数还是映射设置),所有对该文档后续操作(如检索、更新、删除等)都必须使用相同路由值。

    34510

    2万字长文揭示SpringBoot整合ElasticSearch高阶妙用|文末赠书

    3.包含嵌套对象映射 下面的接口createCityMapping创建了一个名为city索引,它包含一个嵌套对象,用于存放城市所属国家数据,部分代码如下: @ApiOperation("创建城市索引...当你在写入嵌套对象字段时,你需要将嵌入文本作为一个单独Hashmap来写入。...要删除数据,需要使用DeleteRequest对象,传入索引名称和主键,调用客户端删除方法即可,代码如下: @Override public int deleteDoc(String indexName...图8.3 经纬度搜索 3.嵌套对象搜索 嵌套对象搜索与其他搜索重要区别是需要给QueryBuilders使用nestedQuery,该查询需要传入嵌套对象路径参数,其关键代码如下: BoolQueryBuilder...图8.10 嵌套对象聚集效果 声明:本文选自人民邮电出版社Elasticsearch数据搜索与分析实战》一书,略有修改,经出版社授权刊登于此 抽奖赠书 本次福利将送出《Elasticsearch数据搜索与分析实战

    1.5K20

    一起学Elasticsearch系列 -Nested & Join

    嵌套类型:Nested Elasticsearch没有内部对象概念,因此,ES在存储复杂类型时候会把对象复杂层次结果扁平化为一个键值对列表。...解决方法可以使用Nested类型,Nested属于object类型一种,是Elasticsearch中用于复杂类型对象数组索引操作,嵌套类型(Nested)允许在一个文档内部嵌套另一个文档,这使得可以在同一个文档中表示复杂层次结构数据...avg (默认):使用所有匹配对象平均相关性得分。 max:使用所有匹配对象最高相关性得分。 min:使用所有匹配对象中最低相关性得分。...none:不要使用匹配对象相关性分数。该查询为父文档分配得分为0。 sum:将所有匹配对象相关性得分相加。 inner_hits(可选):允许获取与嵌套文档匹配内部结果。...当你执行具有Join字段查询时,ES会使用Global Ordinals来识别匹配父文档,并快速定位到对应子文档。这样可以避免对所有文档进行扫描和过滤开销,提高查询效率。

    40910

    《读书报告 – Elasticsearch入门 》----Part II 深入搜索(1)

    第十二章 结构化搜索 结构化搜索_ 是指查询包含内部结构数据。日期时间,和数字都是结构化:它们有明确格式给你执行逻辑操作。一般包括比较数字或日期范围,或确定两个值哪个大。...它检查倒排索引中所有具有短语文档,然后组成一个字节集。...例如,想找到所有最近一个小时文档: "range" : { "timestamp" : { "gt" : "now-1h" } } 这个过滤器将始终能找出所有时间戳大于当前时间减...为了在字符串上执行范围操作,Elasticsearch 会在这个范围内每个短语执行 term 操作。这比日期或数字范围操作慢得多。 字符串范围适用于一个基数较小字段,一个唯一短语个数较少字段。...null 值混淆 对象 exists/missing exists 和 missing 过滤器同样能在内联对象上工作,而不仅仅是核心类型。

    2.1K40

    Springboot2.x整合ElasticSearch7.x实战(三)

    Elasticsearch 第一次查询某个字段时,它将会完整加载这个字段所有 Segment 中倒排索引到内存中,以便于以后查询能够获取更好性能。...日期类型 在 ES 中日期可以为以下形式: 格式化日期字符串,例如 2020-03-17 00:00、2020/03/17 时间戳(和 1970-01-01 00:00:00 UTC 差值),单位毫秒或者秒...即使是格式化日期字符串,ES 底层依然采用时间形式存储。...复杂类型 复合类型主要有对象类型(object)和嵌套类型(nested): 对象类型 JSON 字符串允许嵌套对象,一个文档可以嵌套多个、多层对象。...嵌套类型就是为了解决这种问题嵌套类型将数组中每个 JSON 对象作为独立隐藏文档来存储,每个嵌套对象都能够独立地被搜索,所以上述案例中虽然表面上只有 1 个文档,但实际上是存储了 4 个文档。

    3.5K00

    ElasticSearch 高阶技巧 !

    3.包含嵌套对象映射 下面的接口createCityMapping创建了一个名为city索引,它包含一个嵌套对象,用于存放城市所属国家数据,部分代码如下: @ApiOperation("创建城市索引...当你在写入嵌套对象字段时,你需要将嵌入文本作为一个单独Hashmap来写入。...要删除数据,需要使用DeleteRequest对象,传入索引名称和主键,调用客户端删除方法即可,代码如下: @Override public int deleteDoc(String indexName...图8.3 经纬度搜索 3.嵌套对象搜索 嵌套对象搜索与其他搜索重要区别是需要给QueryBuilders使用nestedQuery,该查询需要传入嵌套对象路径参数,其关键代码如下: BoolQueryBuilder...图8.10 嵌套对象聚集效果 声明:本文选自人民邮电出版社Elasticsearch数据搜索与分析实战》一书,略有修改,经出版社授权刊登于此

    42630

    2万字长文揭示SpringBoot整合ElasticSearch高阶妙用!

    3.包含嵌套对象映射 下面的接口createCityMapping创建了一个名为city索引,它包含一个嵌套对象,用于存放城市所属国家数据,部分代码如下: @ApiOperation("创建城市索引...当你在写入嵌套对象字段时,你需要将嵌入文本作为一个单独Hashmap来写入。...要删除数据,需要使用DeleteRequest对象,传入索引名称和主键,调用客户端删除方法即可,代码如下: @Override public int deleteDoc(String indexName...图8.3 经纬度搜索 3.嵌套对象搜索 嵌套对象搜索与其他搜索重要区别是需要给QueryBuilders使用nestedQuery,该查询需要传入嵌套对象路径参数,其关键代码如下: BoolQueryBuilder...嵌套对象”导航菜单,你可以在该页面用国家作为搜索条件搜索嵌套对象,其效果如图8.4所示。

    1.3K20
    领券