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

在弹性搜索查询中将子对象视为父对象的字段

在弹性搜索查询中,将子对象视为父对象的字段是一种常见的需求,可以通过使用嵌套查询和映射关系来实现。

首先,需要在映射关系中定义子对象和父对象的关系。可以使用nested类型来定义子对象,并使用_parent字段来指定父对象的ID。例如:

代码语言:txt
复制
PUT /my_index
{
  "mappings": {
    "properties": {
      "parent_id": {
        "type": "keyword"
      },
      "child_objects": {
        "type": "nested",
        "properties": {
          "child_id": {
            "type": "keyword"
          },
          "child_value": {
            "type": "text"
          }
        }
      }
    }
  }
}

在上面的映射关系中,child_objects字段是一个嵌套对象,其中包含child_idchild_value两个字段。

接下来,可以使用嵌套查询来查询子对象的值,并将其视为父对象的字段。例如:

代码语言:txt
复制
GET /my_index/_search
{
  "query": {
    "nested": {
      "path": "child_objects",
      "query": {
        "match": {
          "child_objects.child_value": "some_value"
        }
      },
      "inner_hits": {}
    }
  }
}

在上面的查询中,nested查询指定了child_objects字段是一个嵌套对象,并且使用match查询来查询child_objects.child_value字段的值。inner_hits参数可以返回嵌套对象的详细信息,包括父对象的ID。

最后,可以使用聚合功能来统计查询结果的数量和分布情况。例如:

代码语言:txt
复制
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "parent_objects": {
      "terms": {
        "field": "parent_id"
      },
      "aggs": {
        "child_objects": {
          "nested": {
            "path": "child_objects"
          },
          "aggs": {
            "child_values": {
              "terms": {
                "field": "child_objects.child_value"
              }
            }
          }
        }
      }
    }
  }
}

在上面的查询中,size参数设置为0,表示不返回任何文档,只返回聚合结果。parent_objects聚合使用terms聚合来统计父对象的数量和分布情况,child_objects聚合使用nested聚合来指定子对象的路径,child_values聚合使用terms聚合来统计子对象的值的数量和分布情况。

总之,在弹性搜索查询中将子对象视为父对象的字段,可以通过使用嵌套查询和聚合功能来实现。

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

相关·内容

一起学Elasticsearch系列 -Nested & Join

none:不要使用匹配对象相关性分数。该查询文档分配得分为0。 sum:将所有匹配对象相关性得分相加。 inner_hits(可选):允许获取与嵌套文档匹配内部结果。...nested(可选):表示查询是否应该应用于嵌套字段上下文。默认情况下,设为 true。如果设置为 false,则将查询视为普通非嵌套查询。...当你执行具有Join字段查询时,ES会使用Global Ordinals来识别匹配文档,并快速定位到对应文档。这样可以避免对所有文档进行扫描和过滤开销,提高查询效率。...注意 索引父子级关系数据时候必须传入routing参数,即指定把数据存入哪个分片,因为文档和文档必须在同一个分片上,因此,获取、删除或更新文档时需要提供相同路由值。...您可以指定要匹配文档或文档类型以及具体查询条件。 parent_id:用于指定要查询文档文档ID。通过指定parent_id参数,您可以快速检索与特定文档相关联所有文档。

23410

Elasticsearch中父子文档关联:利用Join类型赋予文档层级关系

这些对象在内部被视为独立文档,可以独立地进行索引和查询查询性能:由于Nested类型每个嵌套对象都是独立索引,因此查询性能相对较高。...特殊搜索方式:支持以、以等特殊搜索方式,使得查询更加灵活和高效。 聚集操作:join字段还支持children和parent聚集操作,用于对父子文档进行统计分析。...利用join字段,可以实现一些特殊搜索操作: 以:通过文档属性来查询文档。...:通过文档属性来查询文档。...这种方法需要为文档和文档分别建立索引,并在查询时进行多次请求。虽然这种方法处理父子关系时可能不如join字段高效,但它提供了更多灵活性。

9410

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

它是以JSON格式表示结构化数据对象。文档可以是任何类型数据,例如产品信息、用户记录、日志条目等。每个文档索引中具有唯一ID,用于标识和检索它。 字段(Field):字段是文档中具体数据项。...以下是父子文档关系一些重要概念和特点: 文档和文档: 文档是拥有文档文档,而文档是属于特定文档文档。文档可以独立于其父文档存在,但它们与文档之间建立了关联。...映射定义: 创建索引时,您需要定义父子关系映射定义。映射定义指定了文档和文档之间关系及其字段。这包括声明字段类型、索引设置和关系定义等。...父子关系查询: 父子关系允许您在查询时以文档或文档为基础进行搜索。您可以执行针对特定文档或文档查询,并根据关联关系来过滤结果。 父子关系限制: 父子文档关系设计上具有一些限制。...例如,文档和文档必须位于同一个索引中,并且父子关系字段必须具有相同数据类型。此外,文档和文档之间索引和删除操作需要进行同步,以保持数据一致性。

33420

elasticsearch字段类型与应用场景

搜索当中所有的请求都可以使用别名,不论是精确查询还是聚合查询,都可以使用字段别名。我们可以通过以下这个样例,对字段别名进行定义,并进行搜索。...更加便于检索其中复杂嵌套数据结构。字段操作:我们可以通过定义嵌套字段字段类型,来实现对嵌套数据中某个子字段操作。也可以针对子字段进行单独搜索查询,聚合排序。...例如:嵌套地址对象中,我们可以针对子字段"城市","区县","街道",分别进行查询操作。...将嵌套对象字段作为条件进行查询。...Join连接数据类型:主要用于同一索引文档中,创建/关系,通过添加Join字段,我们可以将文档定义为级文档和级文档,来表示文档建关系。

40552

SaaS|架构与背后技术思考

ID,ChildRelationshipName 用于保存父子关系中子方关系名称,同一个对象关系名称唯一,用于关系反向查询。...第二个索引字段:OrgID + ObjID + RelationID + TargetObjInstanceID,用于对象对象关联查询。...这里着重说一下从父对象对象关联,关联是对象查询语句中查询字段中用()来封装到对象关联,其中 子句中 from orderitem__r orderitem__r 代表是对子对象...必须唯一),用作对象对象查询关联。...3、Relationships 索引透视表 Relationships 是为了 SOQL 快速对象关联查询所定义对象关联对象( Child to Parent) 查询,复合索引(OrgID+GUID

3.2K30

元数据驱动 SaaS 架构与背后技术思考

ID,ChildRelationshipName 用于保存父子关系中子方关系名称,同一个对象关系名称唯一,用于关系反向查询。...第二个索引字段:OrgID + ObjID + RelationID + TargetObjInstanceID,用于对象对象关联查询。...这里着重说一下从父对象对象关联,关联是对象查询语句中查询字段中用()来封装到对象关联,其中 子句中 from orderitem__r orderitem__r 代表是对子对象...必须唯一),用作对象对象查询关联。...3、Relationships 索引透视表 Relationships 是为了 SOQL 快速对象关联查询所定义对象关联对象( Child to Parent) 查询,复合索引(OrgID+GUID

3.5K21

Elasticsearch(二) 文档关系分析

对于文档需要在映射中定义_parent字段索引时候需要指定父辈ID,同样地,父辈ID和类型会作为路由值,这在查询时候非常有益,能够自动地使用这个路由值来查询父辈分片并获得辈,或者查询分片来获得其父辈...//文档字段 "tags":["红色","欧式","皮制"] }' 父子文档查询可以独立查询,也可以通过文档字段查询文档,或者文档字段查询所属文档。...,从父文档到文档搜索,而搜索红色会返回1一个文档。...文档搜索文档使用has_child查询,文档_score是文档基础上计算上,可以设置score_mode,比如max, avg等。...创建,修改或者删除文档时,不影响文档和其他文档,文档数量较多时尤其适用。 文档可以单独作为搜索结果返回。

1.1K30

Elasticsearch探索:flattened 数据类型(7.3版新功能)

如果事先不知道子字段名称或类型,则将动态映射它们。 flattened 数据类型提供了一种替代方法,其中将整个对象映射为单个字段。...对于给定对象,flatten 类型映射将解析出其 leaf 值并将它们作为关键字索引到一个字段中。然后可以通过简单查询和汇总来搜索对象内容。...另一方面,flatten对象字段搜索功能方面存在折衷。仅允许基本查询,不支持数字范围查询或高亮显示(highlighting)。...flattened类型 使用 flattened 数据类型时,必须注意是: flattened 映射类型不应用于索引所有文档内容,因为它将所有值都视为关键字,并且不提供完整搜索功能。...可以对 flattened 对象字段进行排序,以及执行简单关键字样式聚合(例如terms aggregation)。 与查询一样,对数字没有特殊支持-将 JSON 对象所有值都视为关键字。

87151

Elasticsearch:flattened 数据类型 (7.3 发行版新功能)

flattened 数据类型提供了一种替代方法,其中将整个对象映射为单个字段。对于给定对象,flatten 类型映射将解析出其 leaf 值并将它们作为关键字索引到一个字段中。...然后可以通过简单查询和汇总来搜索对象内容。 此数据类型对于索引具有大量或未知数量唯一键对象很有用。...仅为整个 JSON 对象创建一个字段映射,这可以帮助防止由于大量不同字段映射而导致映射爆炸。 另一方面,flatten对象字段搜索功能方面存在折衷。...使用 flattened 数据类型时,必须注意是: flattened 映射类型不应用于索引所有文档内容,因为它将所有值都视为关键字,并且不提供完整搜索功能。...可以对 flattened 对象字段进行排序,以及执行简单关键字样式聚合(例如terms aggregation)。 与查询一样,对数字没有特殊支持-将 JSON 对象所有值都视为关键字。

1.3K62

《ElasticSearch6.x实战教程》之父-关系文档

第七章--关系文档 打虎亲兄弟,上阵父子兵。 本章作为复杂搜索铺垫,介绍父子文档是为了更好介绍复杂场景下ES操作。 非关系型数据库数据库中,我们常常会有表与表关联查询。...但ES6.x开始只允许一个索引Index下创建一个类型Type,甚至未来版本中将会移除创建类型Type。为了继续支持多表关联查询,ES6.x推出了join新类型来支持父子关系文档创建。...此时文章本身就是"",而评论就是"",这类问题也可以通过nested嵌套对象实现,大部分情况下netsted嵌套对象和parent-child父子对象能够互相替代,但他们仍然不同优缺点。...comments"字段,可以看到类型定义为join,relations定义了谁是谁是,"article":"comment"表示article是comment是。...这是嵌套对象查询与父子文档查询区别之一——文档可以单独返回。

91020

Spark 原理与实践 | 青训营笔记

表现为一个RDD分区对应于一个RDD分区或者多个RDD分区对应于一个RDD分区。 宽依赖:RDD每个partition都可能对应多个子RDD分区。...区分宽窄依赖,要了解RDD(Parent RDD)和RDD(Child RDD)。在上图中,“map,filter”左上面的是RDD,而右上面的是RDD。...Spark SQL查询计划首先起始于由SQL解析器返回AST,或者是由API构建DataFrame对象。...在这两种情况下,都会存在未处理属性引用(某个查询字段可能不存在,或者数据类型错误),比如查询语句:SELECT col FROM sales,关于字段col类型,或者该字段是否是一个有效字段,只有等到查看该...当不能确定一个属性字段类型或者没能够与输入表进行匹配时,称之为未处理。Spark SQL使用Catalyst规则以及Catalog对象(能够访问数据源表信息)来处理这些属性。

8810

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

当你写入嵌套对象字段时,你需要将嵌入文本作为一个单独Hashmap来写入。...4.写入带有路由数据 当你想为join字段写入数据时,需要先写入文档,再写入文档,并且写入文档时会带有路由参数,写入数据时,需要给indexRequest对象设置routing参数来指定路由,关键代码如下...图8.4 嵌套对象搜索 4.以 索引cityjoincountry已经包含了join类型父子关联数据,要实现以,需要使用对象JoinQueryBuildershasParentQuery...), false); 这个搜索hasParentQuery需要传入关系名称,然后对文档做了一个term搜索,参数false表示文档相关度不影响文档相关度得分。...页面“以”中,用国家搜索城市效果如图8.5所示。

1.4K20

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

当你写入嵌套对象字段时,你需要将嵌入文本作为一个单独Hashmap来写入。...4.写入带有路由数据 当你想为join字段写入数据时,需要先写入文档,再写入文档,并且写入文档时会带有路由参数,写入数据时,需要给indexRequest对象设置routing参数来指定路由,关键代码如下...图8.4 嵌套对象搜索 4.以 索引cityjoincountry已经包含了join类型父子关联数据,要实现以,需要使用对象JoinQueryBuildershasParentQuery...), false); 这个搜索hasParentQuery需要传入关系名称,然后对文档做了一个term搜索,参数false表示文档相关度不影响文档相关度得分。...页面“以”中,用国家搜索城市效果如图8.5所示。

83620

ElasticSearch 高阶技巧 !

当你写入嵌套对象字段时,你需要将嵌入文本作为一个单独Hashmap来写入。...4.写入带有路由数据 当你想为join字段写入数据时,需要先写入文档,再写入文档,并且写入文档时会带有路由参数,写入数据时,需要给indexRequest对象设置routing参数来指定路由,关键代码如下...图8.4 嵌套对象搜索 4.以 索引cityjoincountry已经包含了join类型父子关联数据,要实现以,需要使用对象JoinQueryBuildershasParentQuery...), false); 这个搜索hasParentQuery需要传入关系名称,然后对文档做了一个term搜索,参数false表示文档相关度不影响文档相关度得分。...页面“以”中,用国家搜索城市效果如图8.5所示。

33830

触类旁通Elasticsearch:关联

Elasticsearch活动分组,可以events.title字段搜索。...对象与嵌套区别在于映射,这会促使ES将嵌套内部对象索引到邻近位置,但是保持独立Lucene文档,如图2所示。搜索时,需要使用nested过滤器和查询,这些会在Lucene文档中搜索。 ?...搜索对象 默认情况下,需要设置所查找字段路径,来引用内部对象。下面的代码指定location_event.name全路径将其作为搜索字段,从而搜索在办公室举办活动。...: "Gheorghe" } ] }' 与对象不同,嵌套查询和过滤器可以文档边界之内搜索。...文档和文档中搜索 (1)has_child查询和过滤器 使用条件来搜索父辈时候,如搜索Elasticsearch活动分组,可以使用has_child查询或过滤器。

6.2K20

Spring认证中国教育管理中心-Apache Solr Spring 数据教程四

4.17.1@Score 为了加载查询结果分数信息,可以添加一个带有@Score注解字段,表示该属性保存文档分数。 score 属性需要是数字,并且每个文档只能出现一次。...嵌套文档需要与文档一起索引,并且不能单独更新。但是,嵌套文档索引中显示为单个文档。解析父子关系是查询时完成。...要指示属性应被视为嵌套对象,必须使用@o.a.s.c.solrj.beans.Field(child=true)或进行注释@ o.s.d.s.core.mapping.ChildDocument。...child parentFilter=type_s:book]")); return solrTemplate.queryForObject("books", query, Book.class); 过滤器始终索引中定义完整文档集...,而不是单个文档文档集。

76120

如何在 ES 中实现嵌套json对象查询,一次讲明白!

,订单索引映射字段里面,包含了一个orderItems字段,它是对象类型,内部有自己字段属性。...这是因为nested文档 ES 内部其实也是独立 lucene 文档,只是我们查询时候,ES 内部帮我们做了类似数据库join处理。最终看起来好像是一个独立文档一样。...实际业务应用中要根据实际情况决定是否选择这种方案。 有一点是可以肯定是,他能满足内部对象数据精准搜索要求!...需要强调是,索引子文档时候,routing是必须,因为要确保文档和文档同一个分片上。 "name":"answer"关键字指明了这是一个文档。...现在exam_index索引中有四个独立文档,我们来看父子文档搜索时候是什么姿势。 先来一个无条件查询,返回所有的文档数据。

7.7K40

Elasticsearch 连接查询

其他内容,参考Elasticsearch官方指南整理 ES中连接 ES中支持两种连接方式:嵌套查询 和 has_child、has_parent父子查询 嵌套查询: 文档中包含嵌套字段,这些字段以数组形式保存对象...,这样每个嵌套对象都可以被搜索。...3 query/filter是查询方式,内部定义了针对嵌套对象查询,注意内部查询一定要是用全路径,即针对obj1name字段查询,要写obj1.name。...然后再索引数据时,指定父子对应关系。 has_child查询 这个查询会检查文档,如果子文档满足查询条件,则返回文当。...has_parent查询与has_child类似,它是去检查文档那个是否匹配,然后返回文档对应文档。

2.8K100

Elasticsearch使用:-关系文档(上)

而这两种类型主要区别是: nested objects 文档中,所有对象都是同一个文档中,而在-关系文档中,对象对象都是完全独立文档。...与 nested objects 相比,-关系主要优势有: 更新文档时,不会重新索引子文档。 创建,修改或删除文档时,不会影响文档或其他文档。 文档可以作为搜索结果独立返回。...而执行搜索请求时是不需要指定文档ID,这是因为搜索请求是向一个索引中所有分片发起请求,而单文档操作是只会向存储该文档分片发送请求。...通过文档查询文档 has_child查询和过滤可以通过文档内容来查询文档。...文档聚合 -文档中支持 文档聚合,这一点和 嵌套聚合 类似。但是,对于文档聚合查询是不支持(和 reverse_nested 类似)。

3.1K31
领券