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

带有嵌套对象的Elasticsearch OR查询返回与条件不匹配的inner_hits

Elasticsearch是一个开源的分布式搜索和分析引擎,它提供了强大的全文搜索、结构化搜索、分析和可视化功能。它基于Apache Lucene库构建,具有高性能、可扩展性和可靠性。

在Elasticsearch中,OR查询是一种用于匹配多个条件中的任意一个的查询方式。当使用带有嵌套对象的OR查询时,可能会出现返回与条件不匹配的inner_hits的情况。这是因为OR查询会返回匹配任意一个条件的文档,而inner_hits是指与查询条件匹配的嵌套对象。

为了解决这个问题,可以使用Elasticsearch的Nested查询。Nested查询允许在嵌套对象中执行查询,并且只返回与查询条件完全匹配的嵌套对象。通过使用Nested查询,可以确保inner_hits只包含与条件匹配的嵌套对象。

以下是使用Nested查询解决带有嵌套对象的OR查询返回与条件不匹配的inner_hits的示例:

代码语言:json
复制
{
  "query": {
    "nested": {
      "path": "nested_object",
      "query": {
        "bool": {
          "should": [
            { "match": { "nested_object.field1": "value1" } },
            { "match": { "nested_object.field2": "value2" } }
          ]
        }
      },
      "inner_hits": {}
    }
  }
}

在上述示例中,我们使用Nested查询来匹配嵌套对象中的两个字段,field1和field2。通过将Nested查询嵌套在bool查询中的should子句中,我们可以实现OR查询的效果。同时,使用inner_hits来返回与查询条件匹配的嵌套对象。

推荐的腾讯云相关产品是腾讯云的Elasticsearch服务。腾讯云Elasticsearch是基于开源Elasticsearch的托管服务,提供了高可用、高性能的Elasticsearch集群,帮助用户快速构建和管理全文搜索、日志分析、数据可视化等应用。您可以通过访问腾讯云的Elasticsearch产品页面了解更多信息和产品介绍。

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

相关·内容

一起学Elasticsearch系列 -Nested & Join

嵌套类型:Nested Elasticsearch没有内部对象概念,因此,ES在存储复杂类型时候会把对象复杂层次结果扁平化为一个键值对列表。...none:不要使用匹配对象相关性分数。该查询为父文档分配得分为0。 sum:将所有匹配对象相关性得分相加。 inner_hits(可选):允许获取嵌套文档匹配内部结果。...使用此参数可以检索查询匹配特定嵌套文档,并返回有关它们信息。 ignore_unmapped(可选):如果设置为 true,则忽略没有嵌套字段映射文档,并将其视为无匹配。...您可以指定要匹配父文档或子文档类型以及具体查询条件。 parent_id:用于指定要查询子文档父文档ID。通过指定parent_id参数,您可以快速检索特定父文档相关联所有子文档。...inner_hits:内部命中参数允许您在查询结果中获取父文档或子文档匹配内部命中结果。您可以使用inner_hits来检索查询条件匹配子文档或匹配父文档及其关联子文档。

35510

触类旁通Elasticsearch:关联

对象嵌套区别在于映射,这会促使ES将嵌套内部对象索引到邻近位置,但是保持独立Lucene文档,如图2所示。在搜索时,需要使用nested过滤器和查询,这些会在Lucene文档中搜索。 ?...例如,可以搜索名为“Lee”且姓为“Hinman”分组会员。缺省时,嵌套查询不会进行跨多个对象匹配,因此避免了名为“Lee”而姓为“Gheorghe”这样意外匹配。 2....例如,根据查询条件匹配程度,每个内部会员文档会得到自己得分。但是来自应用查询是为了查找分组文档,所以ES需要为整个分组文档给出一个得分。在这点上一共有4中选项,通过score_mode设置。...avg:这是默认选项,系统获取所有匹配内部文档之分数,并返回其平均分。 total:系统获取所有匹配内部文档之分数,将其求和并返回。 max:返回匹配内部文档之最大得分。...none:考虑总文档得分计算时,不保留、统计嵌套文档得分。 (4)获知哪些内部文档匹配上了 可以在嵌套查询或过滤器中添加一个inner_hits对象,来展示匹配嵌套文档。

6.3K20
  • elasticsearch去重:collapse、cardinality、terms+top_hits实现总结

    当你指定了collapse参数后,Elasticsearch会在后台对匹配文档进行分组,并且每个分组只会返回一个代表文档。这个代表文档通常是分组中第一个文档,但也可以通过其他参数进行定制。...分页复杂性:当分页功能结合使用时,需要注意Elasticsearch分页是基于索引顺序,而不是折叠后顺序,这可能导致深度分页时性能问题或结果不一致。...top_hits聚合:此聚合类型用于在每个分组(bucket)内部返回匹配文档。当terms聚合结合使用时,它可以在每个分组中返回指定数量文档,通常用于返回每个分组代表性文档。...嵌套top_hits聚合:在terms聚合每个分组中,嵌套一个top_hits聚合。这样,在每个分组内部,你可以指定返回匹配文档数量(通常是1,以实现去重效果)。...查询可能如下所示: GET /products/_search { "size": 0, // 返回具体匹配文档,只返回聚合结果 "aggs": { "brands": { // terms

    98110

    Elasticsearch 8.X 可以按照数组下标取数据吗?

    2.3 数组嵌套文档类型 Nested 尽管数组不保留顺序,但 Elasticsearch 提供了一种 nested 数据类型,可以让你索引数组中对象,并保持它们之间关系。...这对于复杂对象数组非常有用,但同时也带来了一些复杂性,如使用特定 nested 查询和聚合。 3、如何获取指定下标的数据? 3.1 方案一、微小改动。...通过设置size为 1,你可以限制inner_hits返回结果数量。 返回结果: 4、小结 当我们使用 Elasticsearch 处理数组数据时,很容易误解其实际行为。...这使我们能够对数组中每个对象执行更复杂查询,并且能够保留它们之间关系。 这两种方法都有其优点和缺点。选择哪一种方法取决于你具体需求和数据结构。...在任何情况下,理解你数据结构和 Elasticsearch 如何处理它是至关重要。希望通过这篇文章,你对Elasticsearch数组处理有了更深入理解,并能够更有效地解决数组相关问题。

    31610

    Elasticsearch父子关系

    Elasticsearch父子关系 5.x参考 官网join介绍 es6.x一对多方案参考 注意:Elasticsearch关联关系,必须要在同一个索引里面,而且父子关系必须在同一个分片中。...需求:要求分类id为1并且标题或摘要或正文内容,带有“山”关键字文章。...category_id ==1文章 2.查询t_article_contents中contents有“山”,并article_id==步骤1值 3.查询t_article查询category_id...inner_hits默认只能查询3条数据,需要查询更多要自己设置from和size { "has_child": { "query": { "match": { "contents": {...从mysql导入es时候要在两张表数据,整成嵌套json,可以使用插件logstash-filter-aggregate 下载logstash-filter-aggregate 参考文章logstash-filter-aggregate

    49810

    Elasticsearch:Painless scripting 高级编程

    本文介绍了在查询上下文中使用 Painless 脚本,过滤上下文,在脚本中使用条件,删除字段/嵌套字段,访问嵌套对象,在评分中使用脚本等。...Script Query 脚本查询使我们可以在每个文档上执行脚本。 脚本查询通常在过滤器上下文中使用。 如果要在查询或过滤器上下文中包含脚本,请确保将脚本嵌入脚本对象("script":{})中。...您要做就是使用 remove 方法并传入字段/嵌套字段名称。 例如,假设我们要删除 ID 为5文档嵌套字段 “device”。...利用 Scripts 来定制分数 当我们执行匹配查询时,elasticsearch 返回匹配结果,并为每个匹配文档计算分数,以显示文档给定查询匹配程度。...假设我们要搜索 “painless” 文本,但要在搜索结果顶部显示带有更多 “likes” 赞推文。 它更像是顶部热门推文/流行推文。 让我们来看看它实际效果。

    1.6K40

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

    Elasticsearch是一个基于Lucene搜索服务器,它提供了一个分布式、多租户能力全文搜索引擎,并带有一个基于HTTPWeb界面和基于JSON文档。...特征: 字段相关性保留:每个嵌套对象被独立索引后,能够确保对象中字段间相关性不被破坏。这意味着在进行查询时,可以精确地找到满足条件特定嵌套对象。...查询效率:由于嵌套文档直接内嵌在父文档中,查询嵌套文档根文档组合成本相对较低,从而保证了查询高效性,其速度单独存储文档几乎无异。 数据隐藏访问:嵌套文档在内部是隐藏存储,无法直接访问。...若需对嵌套对象进行修改(增加、删除或更改),则必须对整个父文档进行重新索引。值得注意是,查询返回是包含匹配嵌套对象整个父文档,而非单独嵌套文档。...三、嵌套类型定义 在Elasticsearch中,嵌套类型主要用于处理包含多个内部对象字段,这些内部对象通常外部对象相关联。

    40610

    Elasticsearch 连接查询

    其他内容,参考Elasticsearch官方指南整理 ES中连接 在ES中支持两种连接方式:嵌套查询 和 has_child、has_parent父子查询 嵌套查询: 文档中包含嵌套字段,这些字段以数组形式保存对象...2 score_mode 定义里嵌套对象计算分数当前查询分数处理方式,有avg,sum,max,min以及none。...嵌套查询会在执行子查询时候自动触发,然后把结果返回给当前文档查询。...然后再索引数据时,指定父子对应关系。 has_child查询 这个查询会检查子文档,如果子文档满足查询条件,则返回父文当。...has_parent查询has_child类似,它是去检查父文档那个是否匹配,然后返回父文档对应子文档。

    2.8K100

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

    elasticsearch嵌套类型详解 嵌套类型用于在 Elasticsearch 文档中表示对象数组,它允许您对数组中对象进行独立查询和过滤。...,利用嵌套字段进行筛选查询时,必须两个字段值都要符合条件,如果其中一个字段值不满足查询条件,则从索引库中查询不到任何数据,执行结果如图所示: 图片 嵌套类型在处理具有复杂关系文档时非常有用。...使用嵌套类型,可以在 Elasticsearch 中更有效地查询和过滤对象数组,并获取所需详细信息。...实时性:search-as-you-type 字段类型提供了实时搜索建议功能,这意味着当用户输入查询时,系统会立即返回部分输入匹配建议。...._3gram" ] } } } 这个查询会在 "title" 字段及其 N-gram 子字段上执行部分匹配查询返回输入文本匹配文档。

    3.3K10

    Elasticsearch 6.x Mapping设置

    ,默认不存储,且不可搜索 范围类型 INTERSECTS :默认匹配模式,只要搜索值字段值有交集即可匹配到 WITHIN:字段值需要完全包含在搜索值之内,也就是字段值是搜索值子集才能匹配 CONTAINS...Nested nested 类型是一种对象类型特殊版本,它允许索引对象数组,独立地索引每个对象 嵌套类型Object类型区别 通过例子来说明: 插入一个文档,设置mapping,此时 user...导致这个文档错误地匹配对 alice 和 smith 查询 如果最开始就把user设置为 nested 嵌套对象呢?...,这意味着每个嵌套对象都可以独立被搜索 需要注意是: 使用 nested 查询来搜索 使用 nested 和 reverse_nested 聚合来分析 使用 nested sorting 来排序 使用...ES中字段数据类型,譬如:把字符串"5"转为integer5 coerce默认为 true 如果coerce设置为 false,当jsones字段类型匹配将会 rejected 通过 "settings

    3.1K30

    ElasticSearch-7.10 参考手册

    嵌套field 映射,最大深度 index.mapping.nested_fields.limit: 最多嵌套数量 index.mapping.nested_objects.limit:json内部嵌套对象最大数..._last\_first 默认情况下,在Elasticsearch中,搜索请求必须访问查询匹配每个文档,以检索按指定排序 排序top文档。...并且只能对应一个字段,不能对应多个 2.在创建别名时,字段field必须同时存在 3.如果定义了嵌套对象,字段别名必须与其目标具有相同嵌套范围 4.不能应用在索引和更新api上 v object...嵌套对象个数 默认10000 v Join 类型 使用join场景是 一对多关系时。...,通过创建一系列子字段来索引 词项,这样对于通过部分匹配(partially matches ) 去匹配整个索引值查询来说是有效

    5.3K10

    ES常用查询方式

    Elasticsearch(ES)作为功能强大检索引擎,提供了多种查询方式,在不同场景下需要选择合适查询方式以取得最佳查询效果。...进行模糊匹配 Fuzzy Query(模糊查询) 根据字段中模糊匹配进行查询,可以通过设置fuzziness参数来控制模糊程度 Nested Query(嵌套查询嵌套对象进行查询,即查询使用条件本身也是查询...然后根据分词结果构建查询,最终发返回查询结果。...,通过调整operator和minimum_should_match属性值,控制匹配查询逻辑条件,进而控制引擎返回结果。...参考文献 Elasticsearch多种查询方式 Es支持查询方式 Elasticsearch 基本使用(五)查询条件匹配方式(query & query_string) ElasticSearch

    29510

    【干货】Elasticsearch搜索调优权威指南 (13)

    Elasticsearch现在作为Elastic Stack中一员,整个技术栈其他产品版本号已经对齐,现在Kibana、Logstash、Beats和Elasticsearch全都是5.0版本了...1 文档建模 内部对象属性数组并不像期望那样工作。Lucene 中没有内部对象概念,所以Elasticsearch对象层次展开到一个由属性名称和属性值组成简单列表中。...内嵌对象在内部会把数组中每个对象当作单独隐藏文档来索引,即使用下述内嵌查询,可以单独查询每个内嵌对象: curl -XPUT 'ES_HOST:ES_PORT/my_index?...内嵌对象模型缺点如下: 为了 增加 、修改 或 删除 一个内嵌对象文档,整个文档必须重建索引;这就导致内嵌文档越多开销就越大。 搜索请求返回整个文档,而不是只返回匹配内嵌文档。...Elasticsearch使用虚拟化存储工作是没有问题,它因为快速和安装简单而受欢迎,但同样不幸是,在基础上专用本地存储相比它天生就比较慢。

    79920

    Elasticsearch6.6.x 版本学习(二)springboot项目整合高级客户端elasticsearch-rest-high-level-client

    // 创建一个查询请求对象 SearchRequest searchRequest = new SearchRequest(); // 创建查询条件对象...,若分词中任意一个词目标字段匹配上,则可查询到。..., field有通配符忒行 我们要查询值不知道在哪个字段,所以需要多字段进行匹配,只要有一个字段符合条件,那么就可以匹配出来了 searchSourceBuilder...先按照查询条件查询出数据,之后再进行聚合查询 // 创建查询条件对象 SearchSourceBuilder searchSourceBuilder = new...以下是按名字进行分组,之后计算分组之后每个人分数和 // 创建查询条件对象 SearchSourceBuilder searchSourceBuilder =

    2.6K30

    elasticsearch字段类型应用场景

    应用场景:精确查询:当我们需要精确匹配某个关键字时,使用keyword字段类型可以确保我们完全匹配到该条件。类似于关系型数据库中条件查询。例如:我们队邮件地址进行查询。...通过精确匹配关键字来对数据数据进行条件查询或多条件查询。注意事项:keyword类型由于是将整个字段值当做一个关键字进行处理,所以不适用于全文检索,模糊匹配等需要对文本内容进行分析场景。...在配置字段别名时,该字段必须是已经存在字段。如果是针对嵌套对象字段进行别名配置,则别名必须拥有嵌套对象字段一样对象范围。...对于嵌套字段类型数据存储查询所消耗资源相较于其他字段类型是更加高昂。所以需要在存储嵌套对象数据时选择合适字段类型。在以下样例中,我们将user字段类型设置为了Nested。...将嵌套对象子字段作为条件进行查询

    48552

    ElasticSearch可扩展开源弹性搜索解决方案

    pretty 3.操作:通过REST操作数据,GET、POST、PUT、DELETE 二、搜索数据 A.查询和索引过程 1.索引过程:准备发磅到ES文档并在索引中存储文档过程 2.搜索过程:匹配满足查询条件文档过程...B.查询ElasticSearch 1.将多个简单查询封闭为一个JSON格式对象发送给ElasticSearch,称为:查询DSL 2.语法: curl -XGET 'localhost:9200/library...属性 11.fuzzy:第三类模糊查询通过计算给定词项文档编辑距离来得到结果,消耗CPU资源,对需要模糊匹配场景比较有用 12.match_all:匹配索引中所有文档查询 13.wildcard...、and、or和not可以组合过滤器 10.使用"_name"可以命名过滤器 E.复合查询 1.bool:should可以匹配也可以匹配、must必须匹配、must_no必须匹配 2.boosting...:将两个查询封装在一起,并降低其中一个查询返回文档分值 3.constant_score:用于封装另一个查询(过滤器),被封闭查询(过滤器)返回每个文档都得到一个恒定分值,允许我们严格控制赋予被查询或过滤器匹配每个文档分值

    1.5K30
    领券