http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 7619|回复: 2

[Elasticsearch] 58-Elasticsearch嵌套对象查询

[复制链接]
发表于 2019-1-11 08:57:51 | 显示全部楼层 |阅读模式
嵌套对象查询

        由于嵌套对象 被索引在独立隐藏的文档中,我们无法直接查询它们。 相应地,我们必须使用 nested 查询 去获取它们:
[C#] 纯文本查看 复制代码
GET /my_index/blogpost/_search

{

  "query": {

    "bool": {

      "must": [

        {

          "match": {

            "title": "eggs" 

          }

        },

        {

          "nested": {

            "path": "comments", 

            "query": {

              "bool": {

                "must": [ 

                  {

                    "match": {

                      "comments.name": "john"

                    }

                  },

                  {

                    "match": {

                      "comments.age": 28

                    }

                  }

                ]

              }

            }

          }

        }

      ]

}}}


  • title 子句是查询根文档的。
  • nested 子句作用于嵌套字段 comments 。在此查询中,既不能查询根文档字段,也不能查询其他嵌套文档。
  • comments.name 和 comments.age 子句操作在同一个嵌套文档中。



nested 字段可以包含其他的 nested 字段。同样地,nested 查询也可以包含其他的 nested 查询。而嵌套的层次会按照你所期待的被应用。

nested 查询肯定可以匹配到多个嵌套的文档。每一个匹配的嵌套文档都有自己的相关度得分,但是这众多的分数最终需要汇聚为可供根文档使用的一个分数。

默认情况下,根文档的分数是这些嵌套文档分数的平均值。可以通过设置 score_mode 参数来控制这个得分策略,相关策略有 avg (平均值), max (最大值), sum (加和) 和 none (直接返回 1.0 常数值分数)。
[C#] 纯文本查看 复制代码
GET /my_index/blogpost/_search

{

  "query": {

    "bool": {

      "must": [

        {

          "match": {

            "title": "eggs"

          }

        },

        {

          "nested": {

            "path": "comments",

            "score_mode": "max", 

            "query": {

              "bool": {

                "must": [

                  {

                    "match": {

                      "comments.name": "john"

                    }

                  },

                  {

                    "match": {

                      "comments.age": 28

                    }

                  }

                ]

              }

            }

          }

        }

      ]

    }

  }

}



  • 返回最优匹配嵌套文档的 _score 给根文档使用。



    如果 nested 查询放在一个布尔查询的 filter 子句中,其表现就像一个 nested 查询,只是 score_mode 参数不再生效。因为它被用于不打分的查询中 — 只是符合或不符合条件,不必打分 — 那么 score_mode 就没有任何意义,因为根本就没有要打分的地方。



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2019-1-11 13:57:17 | 显示全部楼层
真是难得给力的帖子啊。
发表于 2019-1-11 14:12:43 | 显示全部楼层
我只是路过打酱油的。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-25 16:14

© 2014-2021

快速回复 返回顶部 返回列表