Nested

嵌套数据类型

nested类型是一种对象类型的特殊版本,它允许索引对象数组,独立地索引每个对象。

如何使对象数组变扁平

内部类对象数组并不以你预料的方式工作。Lucene没有内部对象的概念,所以Elasticsearch将对象层次扁平化,转化成字段名字和值构成的简单列表。比如,以下的文档:

curl -XPUT 'localhost:9200/my_index/my_type/1?pretty' -d'

{

"group" : "fans",

"user" : [ // 1

{

"first" : "John",

"last" : "Smith"

},

{

"first" : "Alice",

"last" : "White"

}

]

}'

user字段作为对象动态添加

在内部被转化成如下格式的文档:

{

"group" : "fans",

"user.first" : [ "alice", "john" ],

"user.last" : [ "smith", "white" ]

}

user.first和 user.last扁平化为多值字段,alice和 white的关联关系丢失了。导致这个文档错误地匹配对 alice和 smith的查询:

curl -XGET 'localhost:9200/my_index/_search?pretty' -d'

{

"query": {

"bool": {

"must": [

{ "match": { "user.first": "Alice" }},

{ "match": { "user.last": "Smith" }}

]

}

}

}'

使用nested字段对应object数组

如果你需要索引对象数组,并且保持数组中每个对象的独立性,你应该使用nested对象类型而不是object类型。nested对象将数组中每个对象作为独立隐藏文档来索引,这意味着每个嵌套对象都可以独立被搜索:

curl -XPUT 'localhost:9200/my_index?pretty' -d'

{

"mappings": {

"my_type": {

"properties": {

"user": {

"type": "nested" // 1

}

}

}

}

}'

curl -XPUT 'localhost:9200/my_index/my_type/1?pretty' -d'

{

"group" : "fans",

"user" : [

{

"first" : "John",

"last" : "Smith"

},

{

"first" : "Alice",

"last" : "White"

}

]

}'

curl -XGET 'localhost:9200/my_index/_search?pretty' -d'

{

"query": {

"nested": {

"path": "user",

"query": {

"bool": {

"must": [

{ "match": { "user.first": "Alice" }},

{ "match": { "user.last": "Smith" }} // 2

]

}

}

}

}

}'

curl -XGET 'localhost:9200/my_index/_search?pretty' -d'

{

"query": {

"nested": {

"path": "user",

"query": {

"bool": {

"must": [

{ "match": { "user.first": "Alice" }},

{ "match": { "user.last": "White" }} // 3

]

}

},

"inner_hits": { // 4

"highlight": {

"fields": {

"user.first": {}

}

}

}

}

}

}'

| 1 | user 字段映射为 nested 类型而不是 objec t类型 |

| 2 | 该查询没有匹配,因为 Alice 和 Smith 不在同一个嵌套类中 |

| 3 | 该查询有匹配,因为 Alice 和 White 在同一个嵌套类中 |

| 4 | inner_hits 可以高亮匹配的嵌套文档 |

嵌套文档可以:

| 1 | 使用nested查询来搜索 |

| 2 | 使用 [nested](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-nested-aggregation.html "Nested Aggregation") 和 reverse_nested聚合来分析 |

| 3 | 使用 nested sorting来排序 |

| 4 | 使用 nested inner hits 来检索和高亮 |

nested字段参数

| 参数 | 说明 |

| dynamic | 新属性是否应动态添加到现有对象。接受 true (默认), false 和 strict。 |

| include_in_all | 为对象中的所有属性设置默认的 include_in_all 值,对象本身没有添加到 _all 字段。 |

| properties | 对象内的字段,可以是任何数据类型,包括对象。可以将新属性添加到现有对象。 |

注意

因为嵌套文档是作为单独的文档被索引的,所以嵌套文档只能被 nested 查询、nested / reverse_nested或者 nested inner hits 访问。 比如,一个 string 字段包含嵌套文档,嵌套文档中 index_options 设置为 offsets 以使用 postings highlighter,这些偏移量在主要的高亮阶段是不可用的。必须通过 nested inner hits 来进行高亮操作。

限制nested字段的数量

索引一个包含 100 个 nested字段的文档实际上就是索引 101 个文档,每个嵌套文档都作为一个独立文档来索引。为了防止过度定义嵌套字段的数量,每个索引可以定义的嵌套字段被限制在 50 个。

java es nested,Nested相关推荐

  1. java 嵌套类: Nested classes

    java 嵌套类: Nested classes 嵌套类分类 静态嵌套类 非静态嵌套类 普通内部类: Common classes 局部内部类: Local classes 匿名内部类: Anonym ...

  2. Unknown integral data type for ids : java.lang.String; nested exception is org.hibernate.id.Identifi

    1.发生的异常内容: org.springframework.orm.hibernate5.HibernateSystemException: Unknown integral data type f ...

  3. Type definition error: [simple type, class java.time.Instant]; nested exception is com.fasterxml.jac

    postman调用接口报错 "type": "https://www.jhipster.tech/problem/problem-with-message", ...

  4. ES实现nested类型聚合以及子聚合排序

    ES实现nested类型聚合以及子聚合排序 ES实现nested类型聚合以及子聚合排序 需求业务说明 品牌近7天销量 品牌近7日销量趋势 指定某个sku日期范围销量趋势和价格趋势 电商商品日销量索引m ...

  5. Java嵌套类(Nested Classes)总结

    Nested Classes定义 在java语言规范里面,嵌套类(Nested Classes)定义是: A nested class is any class whose declaration o ...

  6. 14.ES 之 nested 详解(2019-05-22)

    1.问题引入: 由于在 ES 里新建.删除.更新单个文档都是原子性的,那么将相关实体保存在同一文档里面是有意义的. PUT /blog/_doc/1 {     "title":& ...

  7. 为什么es中nested数据must_not不生效?

    文章目录 一.问题描述 二.错误示例 三.正确示例 一.问题描述 在使用ElasticSearch进行查询的时候,发现nested数据在使用must_not时不生效,可以查出所有数据. index中的 ...

  8. java es 数据批量导入_ElasticSearch—Java批量导入导出

    网上找了很多,我的es是2.3.5版本,网上的客户端最少都是5.x版本,所以没有能用的.自己整合了一下 2.3.5版本的. pom文件: org.elasticsearch elasticsearch ...

  9. java es api jar包_Elasticsearch 搜索服务器 Java API 使用详解

    ElasticSearch 是一个基于 Lucene 的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口.Elasticsearch 是用 Java 开发的, ...

  10. java es 数据批量导入_elasticsearch批量数据导入和导出

    之前使用ES的时候建表Type时有个字段的类型搞错了.以至于用API查询时出错.所以就研究一下ES API做了一下ES批量导出和导入重构了Type 1:Java API批量导出 Settings se ...

最新文章

  1. 「杂谈」旷视科技新产品监视学生上课不是什么好事儿
  2. 开源代码却无奈遗弃,濒临奔溃的开源开发者们!
  3. BPDU tunnel技术简介
  4. Windows Server 2012 r2 显示计算机图标
  5. mybatis面试题讲解1
  6. matlab有限差分一维导热,一维导热方程-有限差分法-matlab实现11.docx
  7. Java操作HBase 2.0.5:创建表代码示例
  8. elasticsearch-7.3安装
  9. android 7调用摄像头,Android调用摄像头拍照(兼容7.0)
  10. 解放计算给服务带来的压力,第一想到的就是阿里云高性能计算(HPC)
  11. LG新能源新设首席数字官 首任是英伟达前数据科学家
  12. java打印杨辉三角_java算法之打印杨辉三角
  13. 解决公司服务器加入域中不能启动应用系统的问题
  14. 用ExpandableListView实现好友分组
  15. hadoop安装教程(一次填完所有的坑)
  16. 树莓派摄像头,协议相关,人脸、车牌识别
  17. 江苏开票系统安全接入服务器地址,江苏省增值税发票查询平台网址.doc
  18. html整体结构,详解HTML的整体结构
  19. 视频剪切合并器如何分割音频文件
  20. android 安装APP缓存文件在哪,APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了...

热门文章

  1. Vue之如何调用高德地图步骤详解
  2. 网络爬虫-爱给音效素材网js逆向思路
  3. iov_iter结构体
  4. AI 如何识别西瓜和冬瓜?
  5. Entry name ‘META-INF/xxx‘ collided报错
  6. 数学专业英语-微积分篇
  7. 一文读懂《医疗器械定期风险评价报告》撰写要点
  8. selenium+python爬取京东评论最多的计算机配置信息
  9. html样式类collapse,[ CSS-CSS3 ] 史上最全CSS样式一览表
  10. 闪电侠第四季/全集The Flash迅雷下载