需求描述:

1、基于elasticsearch 父子文档进行子条件查询父文档
2、需要查询出子文档不存在的父文档

已知文档结构:

1、父文档clue_list 关联很多的子文档,我们用roam子文档做测试!

2、roam子文档的结构

{"took" : 7,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 5.4327264,"hits" : [{"_index" : "clue_list","_type" : "_doc","_id" : "roam_668414740279590913","_score" : 5.4327264,"_routing" : "668164507591245825","_source" : {"companyId" : 1,"companyRoamCount" : 0,"centreRoamCount" : 0,"depRoamCount" : 2,"publicRoamCount" : 0,"joinFiled" : {"parent" : "668164507591245825","name" : "roam"}}}]}
}

小试牛刀

需求是查询出roam子文档不存在的数据,由于我们es的所有数据companyId == 1 我们可以用must not来排除 companyId == 1的数据

1、错误的查询方式,直接must not匹配

GET clue_list/_search
{"query": {"bool": {"must": [{"term": {"joinFiled": {"value": "clue_list"}}},{"has_child": {"type": "roam","query": {"bool": {"must_not": [{"term": {"companyId": {"value": 1}}}]}}}}]}}
}

结果:

{"took" : 80,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 0,"relation" : "eq"},"max_score" : null,"hits" : [ ]}
}

结论:直接匹配没有查询出目标数据,由于must not排除了companyId == 1的数据,但是由于我们数据库并没有其他数据,此时查询子文档返回数据为空,子文档为空匹配父文档造成返回数据为空。

2、正确的姿势,先查询出companyId == 1的数据,然后取反将must not放在外层
es执行语句:

GET clue_list/_search
{"query": {"bool": {"must": [{"term": {"joinFiled": {"value": "clue_list"}}},{          "bool": {"must_not": [{"has_child": {"type": "roam","query": {"term": {"companyId": {"value": 1}}}}}]}}]}}
}

响应数据:

验证第一条数据是否不存在roam子文档:

结论:正确查询出不存在roam子文档的数据

寄语:
es父子文档查询通过子文档过滤父文档且需要用到must not的时候,如果有子文档有为空的情况,则需要先查询不满足条件的再在父层级进行排除,如果子文档一定不会为空才能够直接进行排除操作;
当然,懒人适用的方式就是直接用第二种方案,都在上层进行排除不满足条件的数据。

elasticsearch 父子文档使用must not 正确姿势相关推荐

  1. Elasticsearch中如何进行排序(中文+父子文档+嵌套文档)

    Elasticsearch中如何进行排序 背景 最近去兄弟部门的新自定义查询项目组搬砖,项目使用Elasticsearch进行数据的检索和查询.每一个查询页面都需要根据选择的字段进行排序,以为是一个比 ...

  2. es 父子查询_ElasticSearch 父子文档及多代父子文档(grandchild)解析之爸爸去哪儿了...

    0x00 elasticsearch elasticsearch 简称 ES,是一个当前流行的搜索服务器(全文搜索引擎),不得不说,它的搜索速度以及提供的丰富搜索选项,在面对企业级的需求时,大多数情况 ...

  3. elasticsearch 路由文档到分片

    路由文档到分片 当你索引一个文档,它被存储在单独一个主分片上.Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢? 进程不能是 ...

  4. kibana创建es索引_es 索引数据创建mapping 普通内部对象 嵌套文档 父子文档创建和查询...

    普通内部对象 "kibana_sample_data_ecommerce" : { "mappings" : { "properties" ...

  5. es父子结构查询_ES 父子文档查询

    父子文档的特点 1. 父/子文档是完全独立的. 2. 父文档更新不会影响子文档. 3. 子文档更新不会影响父文档或者其它子文档. 父子文档的映射与索引 1. 父子关系 type 的建立必须在索引新建或 ...

  6. ElasticSearch创建文档

    ElasticSearch创建文档 创建文档有两种途径 直接在XcontentBuilder构建json数据,创建文档. // 描述json 数据/** {id:xxx, title:xxx, con ...

  7. 【elasticsearch】文档 CRUD 增删改查 以及 相关 参数

    1.概述 转载:https://mp.weixin.qq.com/s/aOZnZpAC4c_dYkVW8DfNPg 在Elasticsearch中,文档(document)是所有可搜索数据的最小单位. ...

  8. 分布式搜索elasticsearch 索引文档的增删改查 入门

    分布式搜索elasticsearch 索引文档的增删改查 入门 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful ...

  9. ES系列之原来查看文档数量有这么多姿势

    1.引言 有人可能觉得,查看文档数量不是很简单吗?直接 GET /_cat/count/index_name?v 不就可以了吗. 事实上远不止这么简单,比如嵌套文档的情况等.相信你看了我这篇文章之后你 ...

最新文章

  1. html 表格隐藏 显示出来了,如何在html页面打开时隐藏表格
  2. ASCII计算机语言,unicode和ascii的区别是什么
  3. [骗分技巧——随机化Ⅰ]CodeChef-Milestones,CF364D-Ghd
  4. centos6.5安装配置LDAP服务[转]
  5. js 条码枪扫描_年会展台 精彩不断 | 沧田:从打印到扫描录入 国产品牌从未停止...
  6. GitHub 5.9K,目标检测、跟踪、关键点全覆盖的年度开源项目来了!
  7. php发送邮件时间间隔,在使用phpmailer群发邮件时如何设置发送的时间间隔?
  8. 数据结构和算法——堆排序
  9. 探秘中国网购的数据迷城
  10. RTK差分通讯链路---电台
  11. 怎么把PDF转换成Word?2种转Word方法技巧
  12. irr内部收益率php,内部收益率(IRR)
  13. 有关计算机专业的对联,有趣的电脑对联(微软亚洲研究院自然语言计算组研发)...
  14. 帝国php调用文章列表,帝国cms教程内容页面调用当前会员信息和文章数量以及文章列表...
  15. Markdown 语法手册 (完整整理版)
  16. 老司机开车|消费升级如何具体化?
  17. IDEA中大小写切换
  18. Py之pycocotools:pycocotools库的简介、安装、使用方法之详细攻略续篇
  19. ArrayList.toArray()的用法
  20. 【C++】解引用 (及指针) 和 引用 的概念区别

热门文章

  1. 直播网站使用html5播放器,前端web页面通过VUE集成H5直播、点播播放器LivePlayer
  2. 笔记本双显卡的看过来,强制浏览器(chrome)使用独立显卡看4K视频
  3. mongodb绿色版安装
  4. 必备!iShot 1.7.6 中文版 (支持长截图的截图工具)
  5. flexjson反序列化漏洞
  6. ETC1压缩算法详解
  7. 37. 实战:Xpath+线程池实现抓取任意完整小说一千余节到本地txt文件/模板任意小说网站可套用(附源码)
  8. 多目标排序在快手短视频推荐中的实践
  9. 国内好的crm系统有哪些?
  10. 算法小白如何高效、快速刷 LeetCode ?