Elasticsearch索引映射Mapping

简介: Elasticsearch索引映射(mapping)就像数据库中的 Schema ,描述了文档可能具有的字段或属性、每个字段的数据类型,比如 Text,Keyword,Integer 或 Date ,以及 Lucene 是如何索引和存储这些字段的。

映射(mapping)就像数据库中的 Schema ,描述了文档可能具有的字段或属性、每个字段的数据类型,比如 Text,Keyword,Integer 或 Date ,以及 Lucene是如何索引和存储这些字段的。



核心简单字段类型


Elasticsearch 支持如下简单字段类型:


  • 字符串: text,keyword
  • 整数:byte,short,integer,long
  • 浮点数: float,double
  • 布尔型: boolean
  • 日期: date


更多的字段类型比如 geo_point,ip,nested 等可以在链接处查看:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html


当你索引一个包含新字段的文档之前,未曾出现  Elasticsearch 会使用动态映射,通过 JSON 中基本数据类型,尝试猜测字段类型,使用如下规则:


JSON 数据

字段类型

布尔型:true 或者 false

boolean

整数:123

long

浮点数:123.45

double

字符串,有效日期:2021-05-01

date

字符串:foo bar

text 和 keyword


注意:如果你通过引号 ( "123" ) 索引一个数字,它会被映射为字符串类型 text 和 keyword,而不是 long 。但如果这个字段已经映射为 long ,那么 Elasticsearch 会尝试将这个字符串转化为 long (在 coerce 设置为 true 的情况下),如果无法转化,则抛出一个异常。



查看映射


通过 /_mapping ,我们可以查看 Elasticsearch 在一个或多个索引中的映射。


Elasticsearch 文档写入示例:


PUTtwitter/_doc/1{
"user": "kimchy",
"post_date": "2009-11-15T13:12:00",
"message": "Trying out Elasticsearch, so far so good?"}
PUTtwitter/_doc/2{
"user": "kimchy",
"post_date": "2009-11-15T14:12:12",
"message": "Another tweet, will it be indexed?"}
PUTtwitter/_doc/3{
"user": "elastic",
"post_date": "2010-01-15T01:46:38",
"message": "Building the site, should be kewl"}



查看索引映射示例:


GETtwitter/_mapping



Elasticsearch 根据我们索引的文档,为字段动态生成的映射:


{
"twitter" : {
"mappings" : {
"properties" : {
"message" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256            }
          }
        },
"post_date" : {
"type" : "date"        },
"user" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256            }
          }
        }
      }
    }
  }
}


注意:错误的映射,例如将年龄字段映射为 text 类型,而不是 integer ,会导致查询出现令人困惑的结果。


检查一下,而不是假设你的映射是正确的。



自定义字段映射


尽管在很多情况下基本字段数据类型已经够用,但你经常需要为单独字段自定义映射,特别是字符串字段。自定义映射允许你执行下面的操作:


  • 全文字符串字段和精确值字符串字段的区别
  • 使用特定语言分析器
  • 优化字段以适应部分匹配
  • 指定自定义数据格式
  • 还有更多


字段最重要的属性是 type


{
"number_of_clicks": {
"type": "integer"    }
}


字符串字段类型,包括全文字符串 text 和精确值字符串 keyword。


text 类型字段的最重要属性是分析器 analyzer,默认 Elasticsearch 使用 Standard 分析器, 但你可以指定一个内置的分析器替代它,例如 whitespacesimpleenglish、cjk


{
"message": {
"type": "text",
"analyzer": "cjk"  }
}



创建/更新映射


当你首次创建一个索引的时候,可以指定类型的映射。你也可以使用 /_mapping 更新映射。


我们可以更新一个映射来添加一个新字段,但不能更新一个现有的 mapping 把它的字段类型从一个变为另外一个,比如从 text 变为 keyword。我


们可以在维持现有 mapping 的情况下,把一个字段变成一个 multi-field 字段。


为了描述指定映射的两种方式,我们先删除 twitter 索引:


DELETEtwitter



创建一个新索引,指定 message 字段使用 cjk 分析器:


PUTtwitter{
"settings": {
"number_of_shards": "5",
"number_of_replicas": "1"  },
"mappings": {
"properties": {
"user": {
"type": "keyword"      },
"post_date": {
"type": "date"      },
"message": {
"type": "text",
"analyzer": "cjk"      }
    }
  }
}



通过消息体中指定的 mappings 创建了索引映射,索引设置 settings 中通过 number_of_shards 指定分片数,number_of_replicas 指定副本数。


映射增加一个新的名为 tag 的 keyword 类型字段,使用 _mapping


PUTtwitter/_mapping{
"properties": {
"tag": {
"type": "keyword"    }
  }
}



我们不需要再次列出所有已存在的字段,因为无论如何我们都无法改变它们,新字段已经被合并到存在的映射中。



测试映射


可以使用 analyze API 测试字符串字段的映射,比较下面两个请求的输出:


GET/twitter/_analyze{
"field": "message",
"text": "搜索引擎"}
GET/twitter/_analyze{
"field": "tag",
"text": "搜索引擎"}



消息体里面传入我们想要分析的文本。message 字段产生 3 个词条 ”搜索“、”索引” 和 ”引擎“, tag 字段产生单独的词条”搜索引擎“,换句话说,我们的映射正常工作。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
266 5
|
存储 分布式计算 大数据
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
212 3
|
存储 缓存 监控
优化Elasticsearch 索引设计
优化Elasticsearch 索引设计
254 5
|
存储 JSON 关系型数据库
Elasticsearch 索引
【11月更文挑战第3天】
290 4
|
测试技术 API 开发工具
ElasticSearch7.6.x 模板及滚动索引创建及注意事项
ElasticSearch7.6.x 模板及滚动索引创建及注意事项
199 8
|
JSON 自然语言处理 数据库
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
概念、ik分词器、倒排索引、索引和文档的增删改查、RestClient对索引和文档的增删改查
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
|
存储 搜索推荐 数据建模
Elasticsearch 的数据建模与索引设计
【9月更文第3天】Elasticsearch 是一个基于 Lucene 的搜索引擎,广泛应用于全文检索、数据分析等领域。为了确保 Elasticsearch 的高效运行,合理的数据建模和索引设计至关重要。本文将探讨如何为不同的应用场景设计高效的索引结构,并分享一些数据建模的最佳实践。
552 2
|
8月前
|
安全 Java Linux
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
1482 64
|
7月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
3726 0
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
476 5

热门文章

最新文章