ElasticSearch基础数据类型

1.text

text datatype,文本数据类型,用于索引全文值的字段。使用文本数据类型的字段,它们会被分词,在索引之前将字符串转换为单个术语的列表(倒排索引),分词过程允许ES搜索每个全文字段中的单个单词。文本字段不用于排序,很少用于聚合(重要的术语聚合是一个例外)。什么情况适合使用text datatype,只要不具备唯一性的字符串一般都可以使用text,例如:电子邮件正文,商品介绍,个人简介...

PUT test_index1/_mapping/_doc
{
  "properties": {
    "fullName": {
      "type": "text"
    }
  }
}

text datatype的额外参数(部分):

①analyzer:指明该字段用于索引时和搜索时的分析字符串的分词器(使用search_analyzer可覆盖它)。 默认为索引分析器或标 准分析器

②fielddata:指明该字段是否可以使用内存中的fielddata进行排序,聚合或脚本编写?默认值为false,可取值true或false。

③fields:设置该字段为"多字段",可以用不同分析器处理该字段的字符串值例如:当字段既要能被搜索,又要能够排序,就要设置fields。

④index:设置该字段是否可以用于搜索。默认为true,表示可以用于搜索。

⑤search_analyzer:设置在搜索时,用于分析该字段的分析器,默认analyzer

⑥search_quote_analyzer:设置在遇到短语搜索时,用于分析该字段的分析器,默认是【search_analyzer】参数的值。

2.keyword

keyword datatype,关键字数据类型,用于索引结构化内容的字段。使用keyword类型的字段,其不会被分析,给什么值就原封不动地按照这个值索引,所以关键字字段只能按其确切值进行搜索,通常用于过滤、排序和聚合。什么情况下使用keyword datatype,具有唯一性的字符串,例如:电子邮件地址、MAC地址、身份证号、状态代码...

PUT test_index1/_mapping/_doc { "properties": { "idcard": { "type": "keyword" } } }

keyword datatype的额外参数(部分):

①eager_global_ordinals:指明该字段是否加载全局序数?默认为false,不加载。 对于经常用于术语聚合的字段,启用此功能是个好主意。

②fields:指明能以不同的方式索引该字段相同的字符串值,例如用于搜索的一个字段和用于排序和聚合的多字段

③ignore_above:不要索引长于此值的任何字符串。默认为2147483647,以便接受所有值

④index:指明该字段是否可以被搜索,默认为true,表示可以被搜索

⑤index_options:指定该字段应将哪些信息存储在索引中,以便用于评分。默认为docs,但也可以设置为freqs,这样可以在计算分数时考虑术语频率

⑥norms:在进行查询评分时,是否需要考虑字段长度,默认为false,不考虑

3.numeric

umeric datatype,数字类型,这类数据类型都是以确切值索引的,可以使用"term"查询精确匹配。ES支持的数字类型有:

①long -- 带符号的64位整数,最小值-263,最大值263-1

②integer -- 带符号的32位整数,最小值-231,最大值231-1

③short -- 带符号的16位整数,最小值-32768,最大值32767

④byte -- 带符号的8位整数,最小值-128,最小值127

⑤double -- 双精度64位IEEE 754 浮点数

⑥float -- 单精度32位IEEE 754 浮点数

⑦half_float -- 半精度16位IEEE 754 浮点数

⑧scaled_float -- 带有缩放因子的缩放类型浮点数

需要注意的点:

①double、float、half_float这3种浮点型数据类型,认为-0.0和0.0是不同的值。这意味着在-0.0上进行查询(match or term)匹配不到0.0,反之亦然;范围查询也是如此:如果上限为-0.0则0.0将不匹配,如果下限为0.0则-0.0将不匹配。

②就整数类型(byte,short,integer和long)而言,要选择满足实际需求的最小类型,这有助于索引和搜索。但请注意:ES存储数据是根据存储的实际值进行优化的,因此选择一种类型而不是另一种类型,将不会影响存储要求。

③scaled_float类型需要格外注意:必须指定缩放因子scaling_factor。ES索引时,原始值会乘以该缩放因子并四舍五入得到新值,ES内部储存的是这个新值,但返回结果仍是原始值。例如:scale_factor为10的scaled_float字段将在内部存储2.34为23,查询时,ES都会将查询参数*10再四舍五入得到的值与23匹配,若能匹配到返回结果为2.34。例如:

额外参数:

①coerce:是否尝试将字符串转换为整数并截断整数的分数,默认为true,是

②ignore_malformed:如果为true,则忽略格式错误的数字;如果为false则格式错误的数字会抛出异常并拒绝整个文档,默认false

③index:指明该字段是否被搜索。默认为true,表示可以被搜索

④null_value:指明一个与该字段相同类型的值去替换掉该字段中的null。默认为null,表示该字段被视为缺失

4.date

date datatype,日期数据类型。由于JSON中没有表示日期的数据类型,所以ES中的日期可以表示为:

①日期格式化后的字符串,如:"2018-01-01"或"2018/01/01 11:11:11"

②long类型值表示自纪元以来的毫秒数

③integer类型值表示自纪元以来的秒数

如果指定了时区,ES将日期转换为UTC,然后再存储为自纪元以来的毫秒数(long类型)。当字段被设置为date类型时,可以自定义日期格式,但如果未指定格式,则使用默认格式:"strict_date_optional_time||epoch_millis"

注意1:若未指定自定义日期格式,在保存日期的时候容易出错。若未指定日期格式,ES采用默认日期格式:严格日期格式或者时间戳,例如:

2015-01-01 ---- yes

2015/01/01 ---- no

2015-01-1 ---- no

1420070400001 ---- yes

注意2:在使用date类型字段进行排序时,返回的排序值都是以毫秒为单位,例:

额外参数:

①format:自定义的日期格式,默认:strict_date_optional_time || epoch_millis

②ignore_malformed:若为true,则忽略格式错误的数字;若为false,则格式错误的数字会抛出异常并拒绝整个文档。默认false

③index:指明该字段是否可以被搜索,true为可以,默认true

④null_value:接受其中一个配置格式的日期值作为替换任何显式空值的字段。默认为null,表示该字段被视为缺失

5.range

range datatype,范围数据类型。具有大小关系的一个值区间,所以会用到gt、gte、lt、lte..等逻辑表示符。ES支持下面6种范围数据类型:

①integer_range,带符号的32位整数区间,最小值-231,最大值231-1

②long_range,带符号的64位整数区间,最小值-263,最小值263-1

③float_range,单精度32位IEEE 754浮点数区间

④double_range,双精度64位IEEE 754浮点数区间

⑤date_range,日期值范围,表示为系统纪元以来经过的无符号64位整数毫秒

⑥ip_range,支持IPv4或IPv6(或混合)地址ip值范围

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值