前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch 映射1

Elasticsearch 映射1

作者头像
franket
发布2021-11-26 09:47:28
3990
发布2021-11-26 09:47:28
举报
文章被收录于专栏:技术杂记

前言

Elasticsearch 是一个 schemeless 的文档型数据库

ES 不像一般 RDBMS (mysql,postgresql) 一样,字段类型必须提前定义,但是不定义字段类型,并不代表没有字段类型,如果不提前人为指定,ES会在索引数据的时候自动判断以加上类型,一但加上,后面索引文档同字段的数据就默认遵循此类型,如果类型不同,就会报错

这有好处,一般使用场景下开发人员 不用在意这些细节 了,大部分场景中也基本够用,不会有大问题

但是有时还是会产生意外,比如同样对于 “123” ,以字符串索引和以整型索引是不一样的,忽略了有类型这件事,也并不会报错,大量数据导入后,检索的结果不符合预期时就很麻烦

其次,一旦类型被自动构建好,有了数据后,相关字段的部分索引属性就不能变更了,比如之前一个字段默认是 analyzed 的,之后就再也没法改为 not_analyzed

所以根据具体场景,对ES的索引进行一定的 scheme设计 ,以避免此类问题是很有必要的

这里简单分享一下 Elasticsearch Mapping 的相关操作和基础,详细可以参考 Get MappingMapping

Tip:当前的最新版本为 Elasticsearch 2.3.1 ,我这里是拿 2.1.1 来演示


概要


环境

系统版本和ES版本

代码语言:javascript
复制
[root@h102 st]# uname -a 
Linux h102.temp 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@h102 st]# cat /etc/issue
CentOS release 6.6 (Final)
Kernel \r on an \m

[root@h102 st]# curl 'localhost:9200/_cat/nodes?h=v'
2.1.1 
[root@h102 st]#

查看mapping

首先创建一个索引,并加入一条数据

代码语言:javascript
复制
[root@h102 ~]# curl -XPUT 'localhost:9200/abc/test/1?pretty' -d '{"name":"joke","age":12}'
{
  "_index" : "abc",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "created" : true
}
[root@h102 ~]# curl 'localhost:9200/abc/test/1?pretty'
{
  "_index" : "abc",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source":{"name":"joke","age":12}
}
[root@h102 ~]#

查看索引的mapping

代码语言:javascript
复制
[root@h102 ~]# curl 'localhost:9200/abc/_mapping?pretty'
{
  "abc" : {
    "mappings" : {
      "test" : {
        "properties" : {
          "age" : {
            "type" : "long"
          },
          "name" : {
            "type" : "string"
          }
        }
      }
    }
  }
}
[root@h102 ~]#

可以看到虽然我没有手动指定字段类型,但ES根据我指定的输入内容自动判断 age 类型为 longname 类型为 string

还是比较符合我的初衷的

查看API为

代码语言:javascript
复制
host:port/{index}/_mapping/{type}

{index}{type} 中可以使用逗号作为分割来指定一个名称列表,以同时指定多个想查看的对象 . 如果要代表所有的索引 可以在 {index} 中使用 _all

Tip: 可以直接查看索引的所有信息

代码语言:javascript
复制
[root@h102 ~]# curl 'localhost:9200/abc?pretty'
{
  "abc" : {
    "aliases" : { },
    "mappings" : {
      "test" : {
        "properties" : {
          "age" : {
            "type" : "long"
          },
          "name" : {
            "type" : "string"
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1460103933993",
        "uuid" : "VpdJUsGfRQqV0CUPY7PPjw",
        "number_of_replicas" : "1",
        "number_of_shards" : "5",
        "version" : {
          "created" : "2010199"
        }
      }
    },
    "warmers" : { }
  }
}
[root@h102 ~]# 

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 概要
    • 环境
      • 查看mapping
        • 查看索引的mapping
    相关产品与服务
    Elasticsearch Service
    腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档