解码 Elasticsearch 查询 DSL:利用 Elasticsearch 中的 has_child 和 has_parent 查询进行父子文档搜索

这篇具有很好参考价值的文章主要介绍了解码 Elasticsearch 查询 DSL:利用 Elasticsearch 中的 has_child 和 has_parent 查询进行父子文档搜索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天,让我们深入研究 has_child 查询和 has_parent 查询,这将帮助我们将 2 个不同的文档组合到一个索引中,从而使我们能够将它们与关系关联起来。 这样做会对我们搜索相关文档时有很大帮助。 在使用 has_child 及 has_parent 这种关系时,我们必须使用 join 数据类型。更多有关 join 数据类型的介绍,请参考文章 “Elasticsearch: Join 数据类型”。在实际的使用时,我们必须注意的一点是: join 不能跨索引,Elasticsearch 的重点在于速度,而传统 join 的运行速度太慢。 因此,子文档和父文档都必须位于相同的索引和相同的分片中。

解码 Elasticsearch 查询 DSL:利用 Elasticsearch 中的 has_child 和 has_parent 查询进行父子文档搜索,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

了解亲子关系

Elasticsearch 中的父子关系涉及将一个索引中的文档作为父项与另一索引中的文档相关联。 这种关系对于数据组织需要分层结构、需要分层搜索的场景非常重要。 has_child 和 has_parent 查询为我们提供了在这些关系中轻松准确地导航和搜索的选项。

has_child 查询

has_child 查询允许我们根据关联子文档的内容搜索父文档。 当我们想根据孩子的属性对父母进行过滤或评分时,此查询主要有用。

句法

{
  "query": {
    "has_child": {
      "type": "child_type",
      "query": {
        "match": {
          "field": "value"
        }
      }
    }
  }
}

让我们考虑一下,我们的 “fruits” 索引中有父子关系,其中每个 fruit 文档都是父文档,这些水果的 nutritional_info 信息存储为子文档。 has_child 查询可用于查找具有特定营养价值的水果。

{
  "query": {
    "has_child": {
      "type": "nutritional_info",
      "query": {
        "range": {
          "vitamin_c": {
            "gte": 20
          }
        }
      }
    }
  }
}
{
  "query": {
    "has_child": {
      "type": "nutritional_info",
      "query": {
        "range": {
          "vitamin_c": {
            "gte": 20
          }
        }
      }
    }
  }
}

在此示例中,我们正在搜索具有子文档(营养信息)的水果,其中维生素 C 含量大于或等于 20。

{
  "query": {
    "has_parent": {
      "parent_type": "parent_type",
      "query": {
        "term": {
          "field": "value"
        }
      }
    }
  }
}

在与我们上面使用的具有父子关系的 “Fruits” 索引相同的示例中,我们假设每个水果文档都是父文档,并且营养信息存储为子文档。 has_child 查询可用于查找具有特定营养价值的水果。 这是一个例子:

{
  "query": {
    "has_child": {
      "type": "nutritional_info",
      "query": {
        "range": {
          "vitamin_c": {
            "gte": 20
          }
        }
      }
    }
  }
}

在此示例中,我们正在搜索具有子文档(营养信息)的水果,其中维生素 C 含量大于或等于 20。

所以基本上 has_child 和 has_parent 查询只是彼此的关系。

实时用例:

分层数据建模

让我们考虑一个场景,我们正在对组织结构或产品类别等分层数据进行建模。 has_child 和 has_parent 查询使我们能够检索层次结构各个级别的相关信息,从而促进高效的数据导航。

内容过滤

在内容管理系统中,我们可能有代表文章的父文档和代表评论的子文档。 利用 has_child 查询,我们可以根据评论中的特定条件过滤文章,并为客户提供精致的搜索体验。

虽然 has_child 和 has_parent 查询为相关文档搜索提供了强大的选项,但我们应该始终小心常见问题,例如索引之间的映射不一致、较大层次结构的查询性能问题等。

为了最大限度地提高 has_child 和 has_parent 查询的有效性,我们应该确保始终遵循以下最佳实践。

  1. 索引设置:索引设置应配置为支持有效的父子关系。 根据用例适当调整 “index.mapping.single_type” 等设置。
  2. 查询优化:应使用缓存和过滤等查询优化技术来增强搜索性能。

因此,如果这是用于理解 has_child 和 has_parent 查询的入门知识,Elastic 的官方文档可以帮助我们更多地了解有关相同内容的更多详细信息。

更多阅读:Elasticsearch:在 Elasticsearch 中的 join 数据类型父子关系。文章来源地址https://www.toymoban.com/news/detail-783915.html

到了这里,关于解码 Elasticsearch 查询 DSL:利用 Elasticsearch 中的 has_child 和 has_parent 查询进行父子文档搜索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 常用的Elasticsearch查询DSL

    1.基本查询 2.多条件查询 3.范围查询 4.复杂查询 5.聚合查询

    2024年02月12日
    浏览(50)
  • ElasticSearch——DSL查询及结果处理

    常见的查询类型包括: 查询类型 描述 查询所有 查询出所有数据 例如:match_all 全文检索查询 利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:match 、 multi_match 精确查询 根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:id

    2024年02月06日
    浏览(41)
  • ElasticSearch Index查询(Query DSL)

    先贴一个Query DSL的官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html 我平时喜欢查看官方文档,了解数据查询和存储方面的性能优化点,下面是积累的脚本分享。 查询语句格式 查询类型:match_all,match,term,range,fuzzy,bool 等等 查询条件:查询条件会根

    2024年02月07日
    浏览(47)
  • ElasticSearch级查询Query DSL上

    目录 ES高级查询Query DSL match_all 返回源数据_source 返回指定条数size 分页查询fromsize 指定字段排序sort 术语级别查询 Term query术语查询 Terms Query多术语查询 exists query ids query range query范围查询 prefix query前缀查询 wildcard query通配符查询 fuzzy query模糊查询        ES中提供了一种强大

    2024年02月20日
    浏览(58)
  • ElasticSearch 高级查询语法Query DSL实战

    ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified Language 领域专用语言) , Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。 官方文档:https://www.elastic.co/guide/en/elasti

    2024年02月07日
    浏览(48)
  • 【ElasticSearch系列-03】ElasticSearch的高级句法查询Query DSL

    ElasticSearch系列整体栏目 内容 链接地址 【一】ElasticSearch下载和安装 https://zhenghuisheng.blog.csdn.net/article/details/129260827 【二】ElasticSearch概念和基本操作 https://blog.csdn.net/zhenghuishengq/article/details/134121631 【二】ElasticSearch的高级查询Query DSL https://blog.csdn.net/zhenghuishengq/article/details/1

    2024年02月06日
    浏览(56)
  • 2.ElasticSearch 高级查询语法Query DSL实战

    ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL (Domain Specified Language 领域专用语言 ) , Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。 Query DSL | Elasticsearch Guide [7.17] | Elastic 语法

    2024年03月15日
    浏览(51)
  • Elasticsearch --- DSL、RestClient查询文档、搜索结果处理

    elasticsearch的查询依然是基于JSON风格的DSL来实现的。   Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有 :查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询 :利用分词器对用户输入内容分词,然后去倒排

    2024年02月05日
    浏览(58)
  • Elasticsearch 系列(四)- DSL实现自动补全查询

    本章将和大家分享如何通过 Elasticsearch 实现自动补全查询功能。 1、自动补全需求说明 当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,如图: 2、使用拼音分词 要实现根据字母做补全,就必须对文档按照拼音分词。在 GitHub 上恰好有 Elasticsearch 的 拼音分

    2024年03月17日
    浏览(47)
  • SpringCloud(十)——ElasticSearch简单了解(二)DSL查询语句及RestClient查询文档

    查询所有 :查询出所有数据,一般测试用。例如: match_all 全文检索查询 :利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query multi_match_query 精确查询 :根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如: ids range

    2024年02月10日
    浏览(64)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包