在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过滤器来查询它们。
相关推荐
前言 第1章 Elasticsearch入门 1 1.1 Elasticsearch是什么 1 1.1.1 Elasticsearch的历史 2 1.1.2 相关产品 3 1.2 全文搜索 3 1.2.1 Lucene介绍 4 1.2.2 Lucene倒排索引 4 1.3 基础知识 6 1.3.1 Elasticsearch术语及...
用于ElasticSearch,JSON文档和MongoDB集合的自动映射生成器... ElasticSearch入门非常容易,功能强大的全文本搜索引擎可以立即完成许多工作,其中包括动态映射。 是的,您不必告诉ElasticSearch您想要索引哪种...
文档存储的对象-文档映射(例如MongoDB,elasticsearch) 数据导入解析或导出生成 要求 Python(2.7、3.5、3.6) 安装 使用pip安装... pip install related 第一个例子 import related @ relate
Elasticsearch 的 JDBC 导入器 Java 数据库连接 (JDBC) 导入器允许从 JDBC 源获取数据以索引到 . JDBC 导入器是为表格数据设计的。 如果您有包含许多连接的表,则 JDBC 导入程序在将深层嵌套对象重构为 JSON 和处理...
嵌套对象 父/子文档 场塌陷 地理空间数据 Logstash 建议者 控制分数 渗滤器 先决条件 您需要安装各种软件工具。 要求: Docker(如果在OSX上,建议使用Mac的Docker) 码头工人组成 笔记 scripts目录中有一些脚本...
它使用索引的Elasticsearch映射和所选字段的数据类型在下拉列表中仅显示适用的查询。 Mirage提供了两种添加复合查询子句的方法, Add Conditions允许在同一查询中添加其他子句,并且 Nested Query允许添加嵌套...
目录自定义查询和汇总执照 描述esquery减轻了使用极其嵌套的映射( map[string]interface{} )并手动将查询序列化为JSON的需要。 由于所有内容都是静态类型,因此它也有助于消除常见错误,例如拼写错误的查询类型。 ...
UniMapperJS UniMapperJS是通用的Node.js(本机ES6 / ES7)类似LINQ的对象映射器(ORM / ODM),可以映射您为其创建适配器的任何对象。 !! 正在开发中 !! 参见主要特点适配器-如果不支持您的数据库,则可以编写...
hanb-elasticsearch-专家 通过实际示例学习 Elasticsearch - 如何使用它 它以基于 JUnit 的 TestCode 格式编写。 示例代码的数据和索引映射信息位于数据、架构路径中,因此您可以参考。 项目环境 eclipse juno 或...
2. 通过映射键的组合与嵌套,实现一键通用或多用。如: SE-实体拉伸,直接进入参照选择界面,在选择两平面或选择一平面后在空白处点击左键后,会直接进入草绘界面。 ED-编辑定义,可以用于特征、组件中零件、层、...
JoliToken-Elasticsearch令牌资源管理器 这是一个(alpha)Elasticsearch网站插件,可以很好地公开任何已建立索引的文档的令牌信息,并最终了解Lucene在JSON之下的作用! 有没有想过您的文档分析文本是什么样的? ...
(反)序列化嵌套的对象,映射和数组 异步解析引用(反序列化期间) 支持继承 可在任何ES5环境中使用(如果需要ES3,请提交功能请求) ESNext / Typescript的便利装饰器 附带打字稿/流类型 通用解决方案,例如与...
2. 通过映射键的组合与嵌套,实现一键通用或多用。如: SE-实体拉伸,直接进入参照选择界面,在选择两平面或选择一平面后在空白处点击左键后,会直接进入草绘界面。 ED-编辑定义,可以用于特征、组件中零件、层、...