问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

ElasticSearch 索引库操作之Mapping映射属性

创作时间:
作者:
@小白创作中心

ElasticSearch 索引库操作之Mapping映射属性

引用
CSDN
1.
https://blog.csdn.net/2301_80093566/article/details/144911345

在使用Elasticsearch进行数据存储和检索时,Mapping映射属性是一个非常重要的概念。它类似于关系型数据库中的表结构定义,用于描述文档字段的结构和数据类型。本文将详细介绍Elasticsearch中Mapping映射属性的相关知识,包括常见的字段数据类型、Mapping属性以及具体案例分析。

Mapping概述

在Elasticsearch中,mapping是用来定义文档字段的结构和数据类型的,类似于关系型数据库中的表结构定义。为了将数据存储到Elasticsearch索引库中,我们首先需要定义字段的映射规则。常见的映射属性包括字段的数据类型、是否创建索引、是否进行分词等。

常见的字段数据类型(type)

  • String 类型

  • text:用于长文本,需要分词处理,适用于需要进行全文搜索的字段。例如文章内容、描述等。

  • keyword:用于短文本或不可分词的字段,通常用于精确匹配,如品牌名称、IP地址、国家名称等。

  • 数值类型:Elasticsearch 支持多种数值类型,与Java的数值类型一致。

  • byte:1字节

  • short:2字节

  • integer:4字节

  • long:8字节

  • float:单精度浮点数

  • double:双精度浮点数

  • 布尔类型 (boolean):用于表示truefalse值。

  • 日期类型 (date):日期在Elasticsearch中以字符串或毫秒值表示。需要注意的是,JSON文档没有专门的日期类型,日期会被序列化为字符串或毫秒值。

  • 对象类型 (object):支持嵌套的JSON对象,表示一个字段本身包含多个子字段。这种类型通常会嵌套多个字段,需要使用properties来定义子字段。

常见的Mapping 属性

  • index:指定字段是否需要创建倒排索引。

  • true(默认):字段会创建索引,可以进行搜索和排序。

  • false:字段不会创建索引,不能用于搜索和排序。

  • analyzer:分词器,用于指定字段分词规则。

  • 仅适用于text类型字段,用于文本的分词。

  • 常用分词器包括ik_max_wordstandard等。对于keyword、数值、布尔等类型的字段,不需要指定analyzer

  • properties:用于定义嵌套对象类型(object)字段的子字段。如果一个字段是对象类型,它可能包含多个子字段,这时需要通过properties来指定这些子字段的类型和其他属性。

具体案例分析

以一个用户信息文档为例,分析如何为每个字段设置适当的映射:

  • age(年龄)

  • 类型:integerbyte

  • index:根据业务需求,通常需要进行排序或过滤,使用true

  • analyzer:不需要。

  • 解释:年龄是数字类型,不需要分词,选择integerbyte类型即可。

  • weight(体重)

  • 类型:float

  • index:根据业务需求,如果需要参与排序,可以设置true

  • analyzer:不需要。

  • 解释:体重是浮动的数值,选择float类型。

  • isMarried(婚姻状态)

  • 类型:boolean

  • index:如果需要按婚姻状态筛选,设置true

  • analyzer:不需要。

  • 解释:婚姻状态是布尔类型,只需设置为boolean类型。

  • info(描述信息)

  • 类型:text

  • indextrue(通常需要搜索描述信息)。

  • analyzer:需要分词器,例如ik_max_word

  • 解释:描述信息是长文本,需要分词和创建倒排索引。

  • email(电子邮箱)

  • 类型:keyword

  • index:通常情况下不需要搜索邮箱,因此设置false

  • analyzer:不需要。

  • 解释:邮箱是不可分词的字段,使用keyword类型。

  • scope(评分)

  • 类型:float

  • index:根据需求,通常需要排序,设置true

  • analyzer:不需要。

  • 解释:评分通常是浮动值,且需要参与排序。

  • name(姓名)

  • 类型:object

  • 子字段:

  • firstName(名字):类型keyword,不分词。

  • lastName(姓氏):类型keyword,不分词。

  • index:通常都设置为true,除非不需要搜索。

总结

  • 字段数据类型:选择合适的字段类型,决定数据存储和查询效率。
  • 索引与分词器:根据字段是否需要参与搜索,选择是否创建索引,并为可分词的字段指定分词器。
  • 嵌套对象与子字段:使用object类型存储嵌套结构,使用properties属性定义子字段。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号