网站域名设计方案短视频分享网站开发
web/
2025/9/26 23:28:20/
文章来源:
网站域名设计方案,短视频分享网站开发,昆明网站设计制造,辽宁建设工程信息网分数映射配置 在创建索引时#xff0c;可以预先定义字段的类型#xff08;映射类型#xff09;及相关属性。 数据库建表的时候#xff0c;我们DDL依据一般都会指定每个字段的存储类型#xff0c;例如#xff1a;varchar、int、datetime等#xff0c;目的很明确#xff0c;就…映射配置 在创建索引时可以预先定义字段的类型映射类型及相关属性。 数据库建表的时候我们DDL依据一般都会指定每个字段的存储类型例如varchar、int、datetime等目的很明确就是更精确的存储数据防止数据类型格式混乱在Elasticsearch中也是这样创建索引的时候一般也需要指定索引的字段类型这种方式称为映射Mapping。
被动创建动态映射 此时字段和映射类型不需要事先定义只需要存在文档的索引当向此索引添加数据的时候当遇到不存在的映射字段ES会根据数据内容自动添加映射字段定义。使用动态映射的时候根据传递请求数据的不同会创建对应的数据类型。 禁止动态映射
一般生产环境下需要禁用动态映射使用动态映射可能出现以下问题
造成集群元数据一直变更导致不稳定可能造成数据类型与实际类型不一致
禁用动态映射动态mapping的dynamic字段进行配置可选值及含义如下
true支持动态扩展新增数据有新的字段属性时自动添加对于的mapping数据写入成功false不支持动态扩展新增数据有新的字段属性时直接忽略数据写入成功strict不支持动态扩展新增数据有新的字段时报错数据写入失败
主动创建显示映射
我们需要对字段除了数据结构定义更多的限制的时候动态映射创建的内容很可能不符合我们的需求所以可以使用PUT {index}/mapping来更新指定索引的映射内容。
映射类型
我们要创建映射必须还要知道映射类型否则就会走默认的映射类型下面我们看看常用的映射类型。
准备工作
# 创建一个索引
PUT mapping_demo 字符串类型
符串类型可以被设置为以下几种类型 text
当一个字段是要被全文搜索的比如Email内容、产品描述应该使用text类型text类型会被分词。设置text类型以后字段内容会被分词在生成倒排索引以前字符串会被分析器分成一个一个词项text类型的字段不用于排序很少用于聚合 。
keyword
keyword类型不会被分词常用于关键字搜索比如姓名、email地址、主机名、状态码和标签等。如果字段需要进行过滤(比如查姓名是张三发布的博客)、排序、聚合keyword类型的字段只能通过精确值搜索到常常被用来过滤、排序和聚合。
两者区别
它们的区别在于text会对字段进行分词处理而keyword则不会进行分词。如果字段是text类型存入的数据会先进行分词然后将分完词的词组存入索引而keyword则不会进行分词直接存储这样划分数据更加节省内存。
使用案例
先创建一个映射name是keyword类型描述是text类型的
PUT mapping_demo/_mapping
{properties: {name: {type: keyword},city: {type: text,analyzer: ik_smart}}
}# 插入数据
PUT mapping_demo/_doc/1
{name:北京小区,city:北京市昌平区回龙观街道
}# 对于keyword的name字段进行精确查询
GET mapping_demo/_search
{query: {term: {name: 北京小区}}
}# 对于text的city进行模糊查询
GET mapping_demo/_search
{query: {term: {city: 北京市}}
} 数字类型
数字类型也是我们最常用的类型之一下面我们看下数字类型的使用。 在满足需求的情况下优先使用范围小的字段字段长度越小索引和搜索的效率越高。
日期类型 JSON表示日期
JSON没有表达日期的数据类型所以在ES里面日期只能是下面其中之一。
格式化的日期字符串比如2015-01-01 or 2015/01/01 12:10:30用数字表示的从新纪元开始的毫秒数用数字表示的从新纪元开始的秒数epoch_second
ES如何处理日期 在ES的内部时间会被转换为UTC时间如果声明了时区并使用从新纪元开始的毫秒数的长整形数字类型的进行存储在日期字段上的查询内部将会转换为使用长整形的毫秒进行范围查询根据与字段关联的日期格式聚合和存储字段的结果将转换回字符串。
默认日期格式
日期的格式可以被定制化的如果没有声明日期的格式它将会使用默认的格式。
strict_date_optional_time||epoch_millis
意味着它将会接收带时间戳的日期它将遵守strict_date_optional_time限定的格式yyyy-MM-ddTHH:mm:ss.SSSZ 或者 yyyy-MM-dd或者毫秒数。
日期格式示例
PUT mapping_demo/_mapping
{properties: {datetime: {type: date,format: yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis}}
}
# 添加数据
PUT mapping_demo/_doc/2
{name:河北区,city:河北省小区,datetime:2022-02-21 11:35:42
}日期类型参数 布尔类型
boolean类型用于存储文档中的true/false
范围类型
范围类型字段中存储的内容就是一段范围例如年龄30-55岁日期在2020-12-28到2021-01-01之间等。
es中有六种范围类型
integer_rangefloat_rangelong_rangedouble_rangedate_rangeip_range
使用实例
PUT mapping_demo/_mapping
{properties: {age_range: {type: integer_range}}
}# 指定年龄范围可以使用 gt、gte、lt、lte。
PUT mapping_demo/_doc/3
{name:张三,age_range:{gt:20,lt:30}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81066.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!