在es中,我们有时候可能需要映射,{ "field" : "xx" , "field01" : [] }这样格式的嵌套对象,默认情况下es会将field01的type映射成object类型,这个时候,我们去查询可能就会出现问题。需要手动修改成nested嵌套类。型。

一、有问题的情形演示。

1、插入数据,es默认会自动创建映射

curl -XPUT "http://192.168.99.1:9200/nestedindex/personinfo/1" -d'
{
"name" : "my name is zhangsa",
"address" : [
{
"city" : "china hubei",
"zipcode" : "123456"
},
{
"city" : "china huanggang",
"zipcode" : "654321"
}
]
}'

2、查询name字段中必须要出现name这个值,且address.city的值是"huanggang",address.zipcode的值是123456,这个时候应该查询不出来数据,可是查询的结果如下。
    注意这样可以查询出来是因为底层的存储格式被扁平化成下方这种格式了

               address.city=["china", "hubei","huanggang"]

               address.zipcode=["123456","64321"]

               那么city和zipcode之间的关联关系就打乱了。


 二、正确的做法

1、创建索引的时候,手动指定address的type为nested

curl -XPUT "http://192.168.99.1:9200/nestedindex" -d'
{
"mappings": {
"personinfo" : {
"properties": {
"name" : {
"type": "text"
},
"address" : {
"type": "nested",
"properties": {
"city" : {
"type" : "text"
},
"zipcode" : { "type" : "keyword" }
}
}
}
}
}
}'

2、插入数据

curl -XPUT "http://192.168.99.1:9200/nestedindex/personinfo/1" -d'
{
"name" : "my name is zhangsa",
"address" : [
{
"city" : "china hubei",
"zipcode" : "123456"
},
{
"city" : "china huanggang",
"zipcode" : "654321"
}
]
}'

3、查询name字段中必须要出现name这个值,且address.city的值是"huanggang",address.zipcode的值是123456,应该查询不出来结果,就是正确的。
    注意嵌套对象会被索引成分离的隐藏文档,不能直接查询它们。而是需要使用nested查询或nested过滤器来查询它们。

elasticsearch嵌套对象的映射的更多相关文章

  1. elasticsearch 嵌套对象之嵌套类型

    nested类型是一种特殊的对象object数据类型(specialised version of the object datatype ),允许对象数组彼此独立地进行索引和查询. 1. 对象数组如 ...

  2. elasticsearch 嵌套对象使用Multi Match Query、query_string全文检索设置

    参考: https://www.elastic.co/guide/en/elasticsearch/reference/1.7/mapping-nested-type.html https://sta ...

  3. AutoMapper 创建嵌套对象映射(原创)

    之前在做DTO转换时,用到AutoMapper.但DTO的层次太深了,无奈官方没针对嵌套类型提供好的解决方案,于是自己实现了一下: 思路:采用递归和反射很好的避免手工创建嵌套对象的映射. 第一个版本, ...

  4. ElasticSearch 嵌套映射和过滤器及查询

    ElasticSearch - 嵌套映射和过滤器 Because nested objects are indexed as separate hidden documents, we can’t q ...

  5. Elasticsearch创建索引和映射结构详解

    前言 这篇文章详细介绍了如何创建索引和某个类型的映射. 下文中[address]指代elasticsearch服务器访问地址(http://localhost:9200). 1       创建索引 ...

  6. Grails 对象关联映射 (GORM) 一

    转自:http://justjavac.iteye.com/blog/701445 Domain 类是任何商业应用的核心. 他们保存事务处理的状态,也处理预期的行为. 他们通过关联联系在一起, one ...

  7. 做一次面向对象的体操:将JSON字符串转换为嵌套对象的一种方法

    背景与问题 在 <一个略复杂的数据映射聚合例子及代码重构> 一文中,将一个JSON字符串转成了所需要的订单信息Map.尽管做了代码重构和配置化,过程式的代码仍然显得晦涩难懂,并且客户端使用 ...

  8. 第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理

    第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字 ...

  9. ElasticSearch 5学习(9)——映射和分析(string类型废弃)

    在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...

随机推荐

  1. 显示锁lock

    一.内置锁sync 和 显示锁lock概念 1.synv锁又叫内置锁,不能中断,拿不到无限等待即阻塞: java自带关键字: 隐式可重入: 重入锁:锁对应对象要多次调用对应方法,如递归 2. lock ...

  2. 关于FeignClient上的RequestMapping不能生效的问题

    问题 我有两个FeignClient共同继承了一个接口,两个Client有各自不同的url实现,其中一个需要加上类似于@RequestMapping作用在类上的效果,因为@RequestMapping ...

  3. Git - 命令行 常用

    一.合并其他分支的commit(A分支中的commit合并至B分支) 切换到A分支,查询commit历史命令行 : $ git log 复制要合并的commit id (如:663802dfb121e ...

  4. 用java代码遍历excel文件并回显

    今天需要完成282个指标,分析后发现好多都是可复用的字段和方法,生成的dao类也是很多重复的代码,所以写下了简单的自动化遍历excel的test方法, excel业务逻辑如下,用了 HSSFSheet ...

  5. PHP的那些魔术方法(二)

    上文中介绍了非常常用并且也是面试时的热门魔术方法,而这篇文章中的所介绍的或许并不是那么常用,但绝对是加分项.当你能准确地说出这些方法及作用的时候,相信对方更能对你刮目相看. __sleep()与__w ...

  6. 关于python如何构造测试数据

    参考资料:https://www.cnblogs.com/miaoxiaochao/p/13234589.html 一.Faker模块是什么? 一个Python第三方模块,主要用来创建伪数据 无需再手 ...

  7. 『Python』整洁之道

    1. 使用 assert 加一层保险 断言是为了告诉开发人员程序中发生了不可恢复的错误,对于可以预料的错误(如文件不存在),用户可以予以纠正或重试,断言并不是为此而生的. 断言用于程序内部自检,如声明 ...

  8. php备份mysql 数据库

    1.新建php文件 <?phpheader('Content-Type:text/html;charset=utf8'); ini_set("max_execution_time&qu ...

  9. P4332-[SHOI2014]三叉神经树【LCT】

    正题 题目链接:https://www.luogu.com.cn/problem/P4332 题目大意 给出\(n\)个点的一棵有根三叉树,保证每个点的儿子个数为\(3\)或者\(0\),每个叶子有一 ...

  10. 牛客挑战赛48C-铬合金之声【Prufer序列】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11161/C 题目大意 \(n\)个点加\(m\)条边使得不存在环,每种方案的权值是所有联通块的大小乘积. 求 ...