Elasticsearch入门必备——ES中的字段类型以及常用属性

使用Elasticsearch时,了解字段的概念,是必不可少的。毕竟无论是es还是传统的数据库,都无法弱化字段的类型。

背景知识

在Es中,字段的类型很关键:

  • 在索引的时候,如果字段第一次出现,会自动识别某个类型,这种规则之前已经讲过了。
  • 那么如果一个字段已经存在了,并且设置为某个类型。再来一条数据,字段的数据不与当前的类型相符,就会出现字段冲突的问题。如果发生了冲突,在2.x版本会自动拒绝。
  • 如果自动映射无法满足需求,就需要使用者自己来设置映射类型,因此,就需要使用者了解ES中的类型。

下面就步入正题吧!

字段中的索引和存储

其中需要说明的是:

index定义字段的分析类型以及检索方式

  • 如果是no,则无法通过检索查询到该字段;
  • 如果设置为not_analyzed则会将整个字段存储为关键词,常用于汉字短语、邮箱等复杂的字符串;
  • 如果设置为analyzed则将会通过默认的standard分析器进行分析,详细的分析规则参考这里

store定义了字段是否存储

在《ES IN ACTION》中有这样一段描述:

This might be useful when you ask Elasticsearch for a particular field because retrieving a single stored field will be faster than retrieving the entire _source and extracting that field from it, especially when you have large documents.
NOTE When you store individual fields as well, you should take into account that the more you store, the bigger your index gets. Usually bigger indices imply slower indexing and slower searching.

意思是,在ES中原始的文本会存储在_source里面(除非你关闭了它)。默认情况下其他提取出来的字段都不是独立存储的,是从_source里面提取出来的。当然你也可以独立的存储某个字段,只要设置store:true即可。

独立存储某个字段,在频繁使用某个特殊字段时很常用。而且获取独立存储的字段要比从_source中解析快得多,而且额外你还需要从_source中解析出来这个字段,尤其是_source特别大的时候。

不过需要注意的是,独立存储的字段越多,那么索引就越大;索引越大,索引和检索的过程就会越慢....

string

字符串类型,es中最常用的类型,官方文档

比较重要的参数:

index分析
  • analyzed(默认)
  • not_analyzed
  • no
store存储
  • true 独立存储
  • false(默认)不存储,从_source中解析

Numeric

数值类型,注意numeric并不是一个类型,它包括多种类型,比如:long,integer,short,byte,double,float,每种的存储空间都是不一样的,一般默认推荐integer和float。官方文档参考

重要的参数:

index分析
  • not_analyzed(默认) ,设置为该值可以保证该字段能通过检索查询到
  • no
store存储
  • true 独立存储
  • false(默认)不存储,从_source中解析

date

日期类型,该类型可以接受一些常见的日期表达方式,官方文档参考

重要的参数:

index分析
  • not_analyzed(默认) ,设置为该值可以保证该字段能通过检索查询到
  • no
store存储
  • true 独立存储
  • false(默认)不存储,从_source中解析
format格式化
  • strict_date_optional_time||epoch_millis(默认)
  • 你也可以自定义格式化内容,比如
    "date": {
      "type":   "date",
      "format": "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
    }
  • 更多的时间表达式可以参考这里

IP

这个类型可以用来标识IPV4的地址,参考官方文档

常用参数:

index分析
  • not_analyzed(默认) ,设置为该值可以保证该字段能通过检索查询到
  • no
store存储
  • true 独立存储
  • false(默认)不存储,从_source中解析

boolean

布尔类型,所有的类型都可以标识布尔类型,参考官方文档

  • False: 表示该值的有:false, "false", "off", "no", "0", "" (empty string), 0, 0.0
  • True: 所有非False的都是true

重要的参数:

index分析
  • not_analyzed(默认) ,设置为该值可以保证该字段能通过检索查询到
  • no
store存储
  • true 独立存储
  • false(默认)不存储,从_source中解析

本文转自博客园xingoo的博客,原文链接:Elasticsearch入门必备——ES中的字段类型以及常用属性,如需转载请自行联系原博主。

时间: 2024-09-22 11:52:13

Elasticsearch入门必备——ES中的字段类型以及常用属性的相关文章

在SQL Server中修改字段类型和字段名称

  在SQL Server中修改字段类型和字段名称 --以下是完整的SQL执行语句 if exists(select * from syscolumns where id=object_id('数据表名称') and name='字段名') --判断该字段是否存在 begin ALTER TABLE 表明 ALTER COLUMN 字段名 VARCHAR(64);--更改类型 end GO if exists(select * from syscolumns where id=object_id

javascript中对Date类型的常用操作小结_基础知识

javascript中对Date类型的常用操作小结 /** 3. * 日期时间脚本库方法列表: 4. * (1)Date.isValiDate:日期合法性验证 5. * (2)Date.isValiTime:时间合法性验证 6. * (3)Date.isValiDateTime:日期和时间合法性验证 7. * (4)Date.prototype.isLeapYear:判断是否闰年 8. * (5)Date.prototype.format:日期格式化 9. * (6)Date.stringToD

ORACLE MYSQL中join 字段类型不同索引失效的情况

关于JOIN使用不同类型的字段类型,数据库可能进行隐士转换,MYSQL ORACLE都是如此, 下面使用一个列子来看看,脚本如下: mysql: drop table testjoin1; drop table testjoin2; create table testjoin1(id int, name varchar(20)); create table testjoin2(id varchar(20),name varchar(20),key(id); oracle: drop table

MySQL中BLOB字段类型介绍

BLOB类型的字段用于存储二进制数据 MySQL中,BLOB是个类型系列,包括:TinyBlob.Blob.MediumBlob.LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同. MySQL的四种BLOB类型 类型 大小(单位:字节) TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G

《读书报告 -- Elasticsearch入门 》--简单使用(2)

<读书报告 – Elasticsearch入门 > ' 第四章 分布式文件存储 这章的主要内容是理解数据如何在分布式系统中存储. 4.1 路由文档到分片 创建一个新文档时,它是如何确定应该存储在分片1还是分片2上的呢? 这个过程不是随机的,因为将来要检索文档.事实上,它根据一个简单的算法决定: shard = hash(routing) % number_of_primary_shards routing值是一个任意字符串,它默认是_id但也可以自定义.这个routing字符串通过哈希函数生成

SpringData ES中一些底层原理的分析

之前写过一篇SpringData ES 关于字段名和索引中的列名字不一致导致的查询问题,顺便深入学习下Spring Data Elasticsearch. Spring Data Elasticsearch是Spring Data针对Elasticsearch的实现. 它跟Spring Data一样,提供了Repository接口,我们只需要定义一个新的接口并继承这个Repository接口,然后就可以注入这个新的接口使用了. 定义接口:  @Repository public interfac

mysql 增加修改字段类型及删除字段类型_Mysql

MySQL添加字段: alter table `user_movement_log` Add column GatewayId int not null default 0 AFTER `Regionid` (在哪个字段后面添加) 删除字段: alter table `user_movement_log` drop column Gatewayid 调整字段顺序: ALTER TABLE `user_movement_log` CHANGE `GatewayId` `GatewayId` int

sql2005的xml字段类型在.net中的应用

sql|sql2005|xml    今天要介绍的就是sql2005的xml字段类型在.net中的应用.调用过程是:先运用并行化的办法把xml字段类型中的数据转换成Model对象,对Model对象操作后,再运用串行化的方法把Model对象转变成xml格式,最后存储到数据库中.       我认为如果把复杂的业务关系数据存储在xml字段中,可简化数据库的设计,方便业务的处理.        这里写了个小demo:            假如我们有很多店铺信息,每个店铺都有一个ShopID, 所以我

SQL中varchar和nvarchar字段类型的区别

sql|区别|varchar|字段类型 在SQL Server 2000中,NVARCHAR和VARCHAR区别是什么? SQL Server提供两种数据类型来存储字符信息.在如何在SQL Server或应用程序中使用方面,这两种数据类型大致是一样的.差别在于nvarchar是用于存储处理数据库图表中多语言数据的Unicode数据.其它语言有一套需要保存的字符代码的扩展集,这种数据类型支持这样的扩展.因为需要存储其它语言的扩展字符代码,nvarchar占用的空间是varchar的两倍.