elasticsearch 父子文档使用must not 正确姿势
需求描述:
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 正确姿势相关推荐
- Elasticsearch中如何进行排序(中文+父子文档+嵌套文档)
Elasticsearch中如何进行排序 背景 最近去兄弟部门的新自定义查询项目组搬砖,项目使用Elasticsearch进行数据的检索和查询.每一个查询页面都需要根据选择的字段进行排序,以为是一个比 ...
- es 父子查询_ElasticSearch 父子文档及多代父子文档(grandchild)解析之爸爸去哪儿了...
0x00 elasticsearch elasticsearch 简称 ES,是一个当前流行的搜索服务器(全文搜索引擎),不得不说,它的搜索速度以及提供的丰富搜索选项,在面对企业级的需求时,大多数情况 ...
- elasticsearch 路由文档到分片
路由文档到分片 当你索引一个文档,它被存储在单独一个主分片上.Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢? 进程不能是 ...
- kibana创建es索引_es 索引数据创建mapping 普通内部对象 嵌套文档 父子文档创建和查询...
普通内部对象 "kibana_sample_data_ecommerce" : { "mappings" : { "properties" ...
- es父子结构查询_ES 父子文档查询
父子文档的特点 1. 父/子文档是完全独立的. 2. 父文档更新不会影响子文档. 3. 子文档更新不会影响父文档或者其它子文档. 父子文档的映射与索引 1. 父子关系 type 的建立必须在索引新建或 ...
- ElasticSearch创建文档
ElasticSearch创建文档 创建文档有两种途径 直接在XcontentBuilder构建json数据,创建文档. // 描述json 数据/** {id:xxx, title:xxx, con ...
- 【elasticsearch】文档 CRUD 增删改查 以及 相关 参数
1.概述 转载:https://mp.weixin.qq.com/s/aOZnZpAC4c_dYkVW8DfNPg 在Elasticsearch中,文档(document)是所有可搜索数据的最小单位. ...
- 分布式搜索elasticsearch 索引文档的增删改查 入门
分布式搜索elasticsearch 索引文档的增删改查 入门 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful ...
- ES系列之原来查看文档数量有这么多姿势
1.引言 有人可能觉得,查看文档数量不是很简单吗?直接 GET /_cat/count/index_name?v 不就可以了吗. 事实上远不止这么简单,比如嵌套文档的情况等.相信你看了我这篇文章之后你 ...
最新文章
- html 表格隐藏 显示出来了,如何在html页面打开时隐藏表格
- ASCII计算机语言,unicode和ascii的区别是什么
- [骗分技巧——随机化Ⅰ]CodeChef-Milestones,CF364D-Ghd
- centos6.5安装配置LDAP服务[转]
- js 条码枪扫描_年会展台 精彩不断 | 沧田:从打印到扫描录入 国产品牌从未停止...
- GitHub 5.9K,目标检测、跟踪、关键点全覆盖的年度开源项目来了!
- php发送邮件时间间隔,在使用phpmailer群发邮件时如何设置发送的时间间隔?
- 数据结构和算法——堆排序
- 探秘中国网购的数据迷城
- RTK差分通讯链路---电台
- 怎么把PDF转换成Word?2种转Word方法技巧
- irr内部收益率php,内部收益率(IRR)
- 有关计算机专业的对联,有趣的电脑对联(微软亚洲研究院自然语言计算组研发)...
- 帝国php调用文章列表,帝国cms教程内容页面调用当前会员信息和文章数量以及文章列表...
- Markdown 语法手册 (完整整理版)
- 老司机开车|消费升级如何具体化?
- IDEA中大小写切换
- Py之pycocotools:pycocotools库的简介、安装、使用方法之详细攻略续篇
- ArrayList.toArray()的用法
- 【C++】解引用 (及指针) 和 引用 的概念区别
热门文章
- 直播网站使用html5播放器,前端web页面通过VUE集成H5直播、点播播放器LivePlayer
- 笔记本双显卡的看过来,强制浏览器(chrome)使用独立显卡看4K视频
- mongodb绿色版安装
- 必备!iShot 1.7.6 中文版 (支持长截图的截图工具)
- flexjson反序列化漏洞
- ETC1压缩算法详解
- 37. 实战:Xpath+线程池实现抓取任意完整小说一千余节到本地txt文件/模板任意小说网站可套用(附源码)
- 多目标排序在快手短视频推荐中的实践
- 国内好的crm系统有哪些?
- 算法小白如何高效、快速刷 LeetCode ?