`

elasticsearch嵌套对象的映射

阅读更多

    在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过滤器来查询它们。
 

 

  • 大小: 149.6 KB
  • 大小: 101.9 KB
分享到:
评论

相关推荐

    Elasticsearch工具类

    这意味着开发者可以使用特定的注解(如@Document、@Field等)来标记Java实体类,这些注解能够指示Elasticsearch如何将对象映射到索引中的文档。例如,@Document注解用于指定索引名和类型,@Field注解则用于定义字段...

    elastic search 7.6.2 查询

    动态映射是指在文档写入 Elasticsearch 时,会根据文档字段自动识别类型,而静态映射是指事先定义好映射,包含文档的各个字段及其类型等。 三、文档 文档是用来搜索的数据,其中的每一条数据就是一个文档。 四、...

    Elasticsearch入门讲解

    Elasticsearch(简称ES)是一款基于Lucene的开源分布式搜索引擎,以其强大的全文检索、实时分析和高可扩展性而闻名。它不仅用于传统的搜索功能,还广泛应用于日志分析、监控、物联网(IoT)数据处理等大数据场景。其...

    Elasticsearch5.6版本的Jar包

    6. **映射(Mapping)**:映射是Elasticsearch中定义字段数据类型的配置,它决定了数据如何被索引和搜索。5.6版本支持自动映射,但也可以自定义映射以满足特定需求。 7. **近实时处理(NRT)**:Elasticsearch具有...

    最完整的Elasticsearch 基础教程

    Elasticsearch 是一款高度可扩展的全文搜索引擎,广泛应用于大数据分析、日志分析、实时搜索等领域。本教程将深入浅出地介绍Elasticsearch的基础知识,帮助初学者快速上手。 1. **Elasticsearch 概述** - Elastic...

    Mastering ElasticSearch.pdf

    1. **文档(Document)**:在ElasticSearch中,数据是以JSON格式存储的,每个JSON对象被称为一个文档。 2. **索引(Index)**:类似于数据库中的表,索引用于存储具有相似特性的文档集合。 3. **类型(Type)**:在一个...

    canal-mysql-elasticsearch-sync20201010.rar

    《阿里Canal与Elasticsearch数据同步...在实践中,需要灵活运用Canal的配置选项,结合Elasticsearch的索引管理和映射特性,以达到最佳的数据同步效果。同时,不断优化和监控系统的性能,确保数据同步的稳定性和效率。

    Elasticsearch 技术解析与实战.zip

    前言 第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+django搜索框架

    然后,在Django项目中创建一个搜索模型,该模型将映射到Elasticsearch索引。通过Django的信号处理器或自定义管理命令,可以实现数据的自动同步。搜索查询则可以通过Elasticsearch的DSL(Domain Specific Language)...

    Laravel开发-elasticsearch

    为了简化与Elasticsearch的交互,可以使用专门的Laravel查询构建器,如`scout-elasticsearch-driver`。这个驱动允许你使用Laravel Scout的API来操作Elasticsearch索引。安装和配置完成后,你就可以像操作Elastic...

    ElasticSearch学习(1).pdf

    Elasticsearch 支持动态映射,即未预先定义的字段会根据值自动推断类型,但可能会导致类型误判。因此,建议提前定义好映射以确保数据一致性。 **索引操作** - **索引文档**:通过指定索引、类型和文档 ID,可以将...

    elasticsearch-net-api 离线文档

    Elasticsearch 是一款分布式、RESTful 风格的搜索和数据分析引擎,用于处理海量数据并提供实时分析。它的设计目标是使数据搜索变得简单而高效,支持全文搜索、结构化搜索、近实时搜索以及数据分析等多种功能。 ### ...

    千锋ElasticSearch6教程的资料

    - 动态映射:Elasticsearch 6的动态映射策略及其影响。 **4. 分析器与搜索** 4.1 **分析流程** - 分词器:分析器的核心组件,如标准分词器、中文分词器的使用。 - 过滤器:如何通过过滤器修饰分词结果,例如...

    elasticsearch-7.16.2-linux-x86_64.tar.gz.7z

    8. **文档型数据库**:Elasticsearch 存储的是 JSON 文档,支持复杂的嵌套数据结构,适合处理结构化和半结构化数据。 9. **安全性**:Elasticsearch 通过 X-Pack 插件提供用户认证、授权、SSL/TLS 加密以及审计日志...

    最新版Elasticsearch调优搜索速度.pdf

    Elasticsearch 是一款高度可扩展的全文搜索引擎,广泛应用于数据搜索和分析场景。在实际应用中,优化Elasticsearch的搜索速度是确保高效服务的关键。本文将深入探讨影响Elasticsearch查询性能的因素,并提出一系列...

    elasticsearch-mapper:用于ElasticSearch,JSON文档和MongoDB集合的自动映射生成器。

    用于ElasticSearch,JSON文档和MongoDB集合的自动映射生成器... ElasticSearch入门非常容易,功能强大的全文本搜索引擎可以立即完成许多工作,其中包括动态映射。 是的,您不必告诉ElasticSearch您想要索引哪种...

    相关:具有字典,YAML和JSON转换支持的Python中的嵌套对象模型

    文档存储的对象-文档映射(例如MongoDB,elasticsearch) 数据导入解析或导出生成 要求 Python(2.7、3.5、3.6) 安装 使用pip安装... pip install related 第一个例子 import related @ relate

Global site tag (gtag.js) - Google Analytics