Object 数据类型— Elastic Stack 实战手册

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 设计索引 Mapping 时,需要设计的对象中包含对象(非数组),此时就可以使用 Object 类型来存储对象。

970X90.png

· 更多精彩内容,请下载阅读全本《Elastic Stack实战手册》

· 加入创作人行列,一起交流碰撞,参与技术圈年度盛事吧

创作人:李增胜

在某些业务下,设计索引 Mapping 时,需要设计的对象中包含对象(非数组),此时就可以使用 Object 类型来存储对象。

以下定义了店铺对象,包含店铺名称、店铺编码、供应商信息,另外供应商信息中又包含供应商编码、供应商名称,同时供应商信息还包含自身的对象属性所在区域,所在区域又包含省和市,这种定义才能满足查询店铺信息、查询供应商所有店铺信息,以及查询某地区的所有店铺信息等等场景。

在如下示例中,supplier 是索引 my_shop 中的一个 Object,area 又是 supplier 的一个 Object

在访问 area 时,需要通过 supplier.area 才能访问

#定义 mapping
PUT my_shop
{
  "settings": {
    "index": {
      "number_of_shards": 1,
      "number_of_replicas": 1
    }
  },
  "mappings": {
    "properties": {
      "shopName": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "shopCode": {
        "type": "keyword"
      },
      "supplier": {
        "properties": {
          "supplier_code": {
            "type": "keyword"
          },
          "supplier_name": {
            "type": "text",
            "analyzer": "ik_smart"
          },
          "area": {
            "properties": {
              "province": {
                "type": "keyword"
              },
              "city": {
                "type": "keyword"
              }
            }
          }
        }
      }
    }
  }
}

#插入测试数据
POST my_shop/_bulk
{"index":{"_id":1}}
{"shopName":"苹果热销店铺","shopCode":"sc001","supplier":{"supplier_code":"001","supplier_name":"南京农村电商领导者","area":{"province":"江苏省","city":"南京市"}}}
{"index":{"_id":2}}
{"shopName":"美的热销店铺","shopCode":"sc002","supplier":{"supplier_code":"001","supplier_name":"南京农村电商领导者","area":{"province":"江苏省","city":"南京市"}}}
{"index":{"_id":3}}
{"shopName":"金沙酒热销店铺","shopCode":"sc003","supplier":{"supplier_code":"002","supplier_name":"山东农村电商领导者","area":{"province":"江苏省","city":"南京市"}}}
{"index":{"_id":4}}
{"shopName":"华为热销店铺","shopCode":"sc004","supplier":{"supplier_code":"002","supplier_name":"山东农村电商领导者","area":{"province":"山东省","city":"青岛市"}}}

测试数据包括2家供应商

  1. 南京农村电商领导者 店铺:苹果热销店铺 + 美的热销店铺
  2. 山东农村电商领导者 店铺:金沙酒热销店铺 + 华为热销店铺

查询供应商 001 对应的所有店铺:

#访问时,需要supplier.supplier_code指定对象对应的字段
POST my_shop/_search
{
  "query": {
    "match": {
      "supplier.supplier_code": "001"
    }
  }
}
#返回
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.6931471,
    "hits" : [
      {
        "_index" : "my_shop",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.6931471,
        "_source" : {
          "shopName" : "苹果热销店铺",
          "shopCode" : "sc001",
          "supplier" : {
            "supplier_code" : "001",
            "supplier_name" : "南京农村电商领导者",
            "area" : {
              "province" : "江苏省",
              "city" : "南京市"
            }
          }
        }
      },
      {
        "_index" : "my_shop",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.6931471,
        "_source" : {
          "shopName" : "美的热销店铺",
          "shopCode" : "sc002",
          "supplier" : {
            "supplier_code" : "001",
            "supplier_name" : "南京农村电商领导者",
            "area" : {
              "province" : "江苏省",
              "city" : "南京市"
            }
          }
        }
      }
    ]
  }
}

#查询销售区域在南京的所有店铺
#通过 supplier.area.city 访问对应的字段值
POST my_shop/_search
{
  "query": {
    "match": {
      "supplier.area.city": "南京市"
    }
  }
}

#返回
{
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 0.35667494,
    "hits" : [
      {
        "_index" : "my_shop",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.35667494,
        "_source" : {
          "shopName" : "苹果热销店铺",
          "shopCode" : "sc001",
          "supplier" : {
            "supplier_code" : "001",
            "supplier_name" : "南京农村电商领导者",
            "area" : {
              "province" : "江苏省",
              "city" : "南京市"
            }
          }
        }
      },
      {
        "_index" : "my_shop",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.35667494,
        "_source" : {
          "shopName" : "美的热销店铺",
          "shopCode" : "sc002",
          "supplier" : {
            "supplier_code" : "001",
            "supplier_name" : "南京农村电商领导者",
            "area" : {
              "province" : "江苏省",
              "city" : "南京市"
            }
          }
        }
      },
      {
        "_index" : "my_shop",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 0.35667494,
        "_source" : {
          "shopName" : "金沙酒热销店铺",
          "shopCode" : "sc003",
          "supplier" : {
            "supplier_code" : "002",
            "supplier_name" : "山东农村电商领导者",
            "area" : {
              "province" : "江苏省",
              "city" : "南京市"
            }
          }
        }
      }
    ]
  }
}
相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
Python之pandas:数据类型变换之object、category、bool、int32、int64、float64以及数据类型标准化之详细攻略
Python之pandas:数据类型变换之object、category、bool、int32、int64、float64以及数据类型标准化之详细攻略
Python之pandas:数据类型变换之object、category、bool、int32、int64、float64以及数据类型标准化之详细攻略
|
前端开发 Java 编译器
Object c/swift,java,c/c++在32位和64位各个平台上基本数据类型 所占有的字节数
Object c/swift,java,c/c++在32位和64位各个平台上基本数据类型 所占有的字节数
259 0
|
JavaScript 前端开发 Java
编程笔记 html5&css&js 073 JavaScript Object数据类型
编程笔记 html5&css&js 073 JavaScript Object数据类型
153 2
|
JavaScript 前端开发
js基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。具体案例使用演示
js基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。具体案例使用演示
208 1
|
JavaScript 前端开发
JavaScript基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。
JavaScript基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。
194 0
|
JavaScript 前端开发 Java
为什么使用typeof判断数据类型的时候null出来是object?
为什么使用typeof判断数据类型的时候null出来是object?
C#数据类型(object)
C#数据类型(object)
425 0
|
存储 索引
带你读《Elastic Stack 实战手册》之20:——3.4.2.5.Object数据类型(上)
带你读《Elastic Stack 实战手册》之20:——3.4.2.5.Object数据类型(上)
126 0
|
项目管理 微服务
带你读《Elastic Stack 实战手册》之20:——3.4.2.5.Object数据类型(下)
带你读《Elastic Stack 实战手册》之20:——3.4.2.5.Object数据类型(下)
128 0
|
JavaScript 前端开发 开发者
带你读书之“红宝书”:第三章 语法基础(中)之 数据类型中部分 Object 类型
带你读书之“红宝书”:第三章 语法基础(中)之 数据类型中部分 Object 类型
177 0
带你读书之“红宝书”:第三章 语法基础(中)之 数据类型中部分 Object 类型

热门文章

最新文章