第一次接触es,感觉啥啥都是懵逼状态,不得不吐槽一下,出了问题网上写的那些文章真的是看不懂,要么代码不全,要么就是各种抄,根本结局不了问题,还是决定自己写一个吧,没准哪天就帮别人节省了时间.
话不多说,这里使用的版本是7.12.1,查看es版本方法:
直接在浏览器访问es端口号就行 ps:搞了一天才发现看的是2.0的api 我吐了

博主现在查看的api是7.14版本的(直接看最新的了)
为什么要用nested嵌套结构呢?具体可以看官网的解释,这里就不在多做赘述了:
https://www.elastic.co/guide/en/elasticsearch/reference/7.14/nested.html

简单来说就是需要一个多层嵌套的对象结构,例如:
公司下面有部门员工,员工下面有所属项目,都是一对多的关系,后面的代码也是使用的这个逻辑(可能有点不太合理,但是大致是这么个意思)

公司:
____部门名称
____部门员工:
________id
________姓名
________年龄
________所属项目:
____________项目名称

直接上代码

1.声明结构

PUT  localhost:9200/test_mapping7{"mappings": {"properties":{"group": {"type": "text"},"user":{"type": "nested",  //嵌套类型type应为nested"properties":{"id": {"type": "keyword"},"name":{"type": "text"},"age":{ "type": "short"},"project":{"type": "nested","properties":{"name": {"type": "text"}}}}}}      }
}

nested类型结构的属性应用properties表示,以下是官网api

2.声明成功后我们可以查询一下声明的结构

GET localhost:9200/test_mapping7?pretty  //pretty是输出json格式化后的数据{                                                "test_mapping7" : {                            "aliases" : { },                             "mappings" : {                               "properties" : {                           "group" : {                              "type" : "text"                        },                                       "user" : {                               "type" : "nested",                     "properties" : {                       "age" : {                            "type" : "short"                   },                                   "id" : {                             "type" : "keyword"                 },                                   "name" : {                           "type" : "text"                    },                                   "project" : {                        "type" : "nested",                 "properties" : {                   "name" : {                       "type" : "text"                }                                }                                  }                                    }                                      }                                        }                                          },                                           "settings" : {                               "index" : {                                "routing" : {                            "allocation" : {                       "include" : {                        "_tier_preference" : "data_content"}                                    }                                      },                                       "number_of_shards" : "1",                "provided_name" : "test_mapping7",       "creation_date" : "1630464120543",       "number_of_replicas" : "1",              "uuid" : "stKB9OdESUmnqJwBKOK-pQ",       "version" : {                            "created" : "7120199"                  }                                        }                                          }                                            }
}

3.插入数据
重点: 插入数据这块必须在index名后面加上/_doc/ , 本身这里应该是设置type的字段,但是在实际插入数据时,用自定义的stu,class等都会报错,难道只能插入doc类型? ps:正常猜想是在mapping中没有设置最外层的type,但是实际操作时声明type会报错

POST localhost:9200/test_mapping7/_doc/1 {"group": "研发","user":[{"id": 1,"name": "zhangsan","age": 12,"project":[{"name": "pro1"}]},{"id": 2,"name": "lisi","age": 15,"project":[{"name": "pro12"}]}]
}result:{"_index": "test_mapping7","_type": "_doc","_id": "2","_version": 1,"result": "created","_shards": {"total": 1,"successful": 1,"failed": 0},"_seq_no": 1,"_primary_term": 1
}

再插入一条

POST localhost:9200/test_mapping7/_doc/2{"group": "市场","user":[{"id": 3,"name": "xiaomei","age": 21,"project":[{"name": "pro3"}]},{"id": 4,"name": "xiaoxue","age": 25,"project":[{"name": "pro4"}]}]
}result:{"_index": "test_mapping7","_type": "_doc","_id": "2","_version": 1,"result": "created","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 1,"_primary_term": 1
}

查询一下插入的数据

GET localhost:9200/test_mapping7/_search?pretty{                                         "took" : 3,                             "timed_out" : false,                    "_shards" : {                           "total" : 1,                          "successful" : 1,                     "skipped" : 0,                        "failed" : 0                          },                                      "hits" : {                              "total" : {                           "value" : 2,                        "relation" : "eq"                   },                                    "max_score" : 1.0,                    "hits" : [                            {                                   "_index" : "test_mapping7",       "_type" : "_doc",                 "_id" : "1",                      "_score" : 1.0,                   "_source" : {                     "group" : "研发",                 "user" : [                      {                             "id" : 1,                   "name" : "zhangsan",        "age" : 12,                 "project" : [               {                         "name" : "pro1"         }                         ]                           },                            {                             "id" : 2,                   "name" : "lisi",            "age" : 14,                 "project" : [               {                         "name" : "pro12"        }                         ]                           }                             ]                               }                                 },                                  {                                   "_index" : "test_mapping7",       "_type" : "_doc",                 "_id" : "2",                      "_score" : 1.0,                   "_source" : {                     "group" : "市场",                 "user" : [                      {                             "id" : 3,                   "name" : "xiaomei",         "age" : 21,                 "project" : [               {                         "name" : "pro3"         }                         ]                           },                            {                             "id" : 4,                   "name" : "xiaoxue",         "age" : 25,                 "project" : [               {                         "name" : "pro4"         }                         ]                           }                             ]                               }                                 }                                   ]                                     }
}                                         

4.查询

首先查询一下name=zhangsan的index

GET localhost:9200/test_mapping7/_search{"query": {"nested":{"path": "user","query": {"bool":{"must": [{"match": {"user.name":"zhangsan"}}]}}}}
}result:{"took": 2,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1.2039728,"hits": [{"_index": "test_mapping7","_type": "_doc","_id": "1","_score": 1.2039728,"_source": {"group": "研发","user": [{"id": 1,"name": "zhangsan","age": 12,"project": [{"name": "pro1"}]},{"id": 2,"name": "lisi","age": 14,"project": [{"name": "pro12"}]}]}}]}
}

可以看到直接返回了整个doc1对象,符合预期结果

那么我们如果查询条件是project.name=pro4呢?划重点
nested.path必须是从外层开始写: user.project,不可以直接写project
match条件也要从最外层开始写 user.project.name=pro4,不可以直接写project.name=pro4

POST localhost:9200/test_mapping7/_search{"query": {"nested":{"path": "user.project","query": {"bool":{"must": [{"match": {"user.project.name":"pro4"}}]}}}}
}result:{"took": 2,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1.2039728,"hits": [{"_index": "test_mapping7","_type": "_doc","_id": "2","_score": 1.2039728,"_source": {"group": "市场","user": [{"id": 3,"name": "xiaomei","age": 21,"project": [{"name": "pro3"}]},{"id": 4,"name": "xiaoxue","age": 25,"project": [{"name": "pro4"}]}]}}]}
}

成功命中
未完待续,欢迎补充指正

Elasticsearch nested嵌套类型相关推荐

  1. 【Elasticsearch】 es nested 嵌套类型 详解

    1.概述 数据类型,大合集参考 [Elasticsearch]Elasticsearch的数据类型 (text.keyword.date.object.geo等) 2 嵌套类型 - nested 嵌套 ...

  2. 嵌套查询和连接查询的效率_Elasticsearch 7.x Nested 嵌套类型查询 | ES 干货

    一.什么是 ES Nested 嵌套 Elasticsearch 有很多数据类型,大致如下: 基本数据类型: string 类型.ES 7.x 中,string 类型会升级为:text 和 keywo ...

  3. es内嵌文档查询_Elasticsearch 7.x Nested 嵌套类型查询 | ES 干货

    一.什么是 ES Nested 嵌套 Elasticsearch 有很多数据类型,大致如下: 基本数据类型: string 类型.ES 7.x 中,string 类型会升级为:text 和 keywo ...

  4. 转:elasticsearch nested嵌套查询

    转自: [弄nèng - Elasticsearch]DSL入门篇(七)-- Nested类型查询,聚合_司马缸砸缸了-CSDN博客文章目录1. nested query2. nested 对象聚合项 ...

  5. (五)ElasticSearch 6.1.1数据类型

    1.elasticsearch的数据类型 1.1.核心数据类型 1.1.1.字符串类型(string不再支持) 当一个字段需要用于全文搜索(会被分词), 比如产品名称.产品描述信息, 就应该使用tex ...

  6. elasticsearch 学习须知

    人工智能.大数据快速发展的今天,对于 TB 甚至 PB 级大数据的快速检索已然成为刚需.Elasticsearch 作为开源领域的后起之秀,从2010年至今得到飞跃式的发展. Elasticsearc ...

  7. elasticsearch 数据类型

    参考 aggregate_metric_double:预聚合指标值 字段有4个子字段 min, max, sum, value_count来分别存储double数值,专做聚合使用 metrics: [ ...

  8. elasticsearch-rest-high-level-client操作elasticsearch

    文章目录 摘要 依赖 yml配置 连接配置 索引结构 普通常见非嵌套结构的CRUD 新增 更新(根据id更新) 更新(高级,根据搜索条件更新,采用无痛painless脚本) 删除 删除(根据搜索条件删 ...

  9. Elasticsearch中字段类型(Field Type)详解

    ElasticSearch 7.7 字段类型(Field datatype)详解 字符串, object, 数值, 日期, 数组, 0x00 字符串: text, keyword 5.0以后,stri ...

  10. Elasticsearch 5.4 Mapping详解

    为什么80%的码农都做不了架构师?>>>    前言 一Field datatype字段数据类型 1string类型 2 text类型 3 keyword类型 4 数字类型 5 Ob ...

最新文章

  1. centos7 系统下搭建 lnmp 环境
  2. React如何使用 Ant Design(简单使用)
  3. java中wait和sleep的区别
  4. webpack中实现按需加载
  5. hive 十六进制转十进制_hive 常用运算
  6. 第16课 “远程 Git文档库” 的基础操作
  7. linux源码安装 rpm命令
  8. 女博士实名举报北航人工智能教授:性骚扰!
  9. app测试用mysql数据库,数据库: 安装配置数据库,使用Navicat for MySQL和手机APP 连接测试...
  10. 【HDU 杭电 5773 The All-purpose Zero】
  11. ICE的Timer和TimerTask
  12. KEIL expected an identifier
  13. Android仿淘宝头条垂直滚动,垂直走马灯,公告
  14. 脉冲响应不变法C语言程序,脉冲响应不变法-数字信号处理总结.ppt
  15. 【前端CSS】CSS的选择器属性详细介绍
  16. CES 2011—少数派报告
  17. 想进大厂, Jira 管理平台你会用么?
  18. Hadoop 深入浅出 ---- 入门 (1)
  19. 科学家在类脑芯片上实现类似LSTM的功能,能效高1000倍
  20. 哈工大数据库系统(上):关系模型之基本概念(三)课后测验与作业

热门文章

  1. 合肥学院计算机论文,合肥学院本科生毕业论文.doc
  2. video截取视频内容作为封面
  3. 怎么在线制作软件的logo
  4. 证件照怎么制作?怎样自己在线制作2寸照片?
  5. 傻白入门芯片设计,Substrate/RDL/Interposer/EMIB/TSV(三)
  6. NC如何在打印模板中添加打印审批流记录
  7. C# 利用Excel及Spire.xls实现用户自定义打印模板
  8. 罗振宇2019-2020“时间的朋友”跨年演讲精华版全文
  9. 2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!(转载)
  10. 专访京东孙海波:大牛架构师养成记及电商供应链中区块链技术的应用