无论是关系型数据库还是非关系型数据库,乃至elasticsearch这种事实上承担着一定储存作用的搜索引擎,数据类型都是非常重要而基础的概念。本文基于elasticsearch 5.x版本。

核心数据类型(Core datatypes)

string

text:全文检索需要分词的类型。

keyword:精确值。合适分组排序。

Caused by: NotSerializableExceptionWrapper[: Fielddata is disabled on text fields by default. Set fielddata=true on [gid] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.]; nested: IllegalArgumentException[Fielddata is disabled on text fields by default. Set fielddata=true on [gid] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.];

以上异常就是由于对text类型的字段进行排序造成的。

数字类型 Numeric datatypes

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


integer  一个带32位整数,最小值为-231,最大值为231-1。


short


byte


double


float


half_float  半精度16位IEEE 754浮点数。


scaled_float  支持固定的缩放因子的浮点数。


对于数字类型,熟悉关系型数据库的应该都不难理解 。其中,独特的是half_float和scaled_float两个类型。

官方的解释:

double,float和half_float类型认为-0.0和+0.0是不同的值。因此,在-0.0上执行术语查询将不匹配+0.0,反之亦然。对于范围查询也是如此:如果上限为-0.0,则+0.0将不匹配,如果下限为+0.0,则-0.0将不匹配。

对于浮点类型,使用缩放因子将浮点数据存储到整数中通常更为有效,这是缩放缩放类型在引擎盖下执行的。比如价格,12.34元,缩放因子为100,那么存储为1234。这是一个整数。这大大有助于节省磁盘空间,因为整数比浮点更容易压缩。Date datatype

日期类型 Date datatype

date

JSON中没有日期类型,所以在ELasticsearch中,日期类型可以是以下几种:

日期格式的字符串:e.g. “2015-01-01” or “2015/01/01 12:10:30”.

long类型的毫秒数( milliseconds-since-the-epoch)

integer的秒数(seconds-since-the-epoch)

日期格式可以自定义,如果没有自定义,默认格式如下:

"strict_date_optional_time||epoch_millis"

布尔类型 Boolean datatype

boolean

true和false。但也可以接受自定义值。

范围类型 Range datatypes

integer_range

float_range

long_range

double_range

date_range

ip_range

这个类型的字段可以通过两个字段来界定上下范围。

复杂数据类型 Complex datatypes

数组类型 Array datatype

数组: ["one","two"],[1,2]

嵌套数组: [1, [2,3]] 相当于 [1,2,3]

对象数组: [{ "name": "Mary", "age": 12 },{ "name": "John", "age": 10 }]

动态添加字段时,数组中的第一个值决定字段类型。所有后续值必须是相同的数据类型,或至少可以将后续值强制转换为相同的数据类型。

不支持使用数据类型混合的数组:[10,“some string”]

数组可能包含空值,它们被配置的null_value替换或完全跳过。空数组[]被视为缺少的字段 - 没有值的字段。

对象类型 Object datatype

包含一个json对象。其中可以有个子节点。子节点可以是json对象。

 

在内部,该文档被索引为一个简单的,平均的键值对列表,如下所示:

 

真正储存如下:

 

嵌套对象类型 Nested datatype

同对象类型,不过它可以是一个json数组。

地理数据类型

经纬度类型 Geo-point datatype

复杂形状数据类型 Geo-Shape datatype

geo_shape数据类型便于对任意地理形状进行索引和搜索,如矩形和多边形。当被索引的数据或执行的查询包含除了点之外的形状时,应该使用它。

您可以使用geo_shape Query查询使用此类型的文档。

专门数据类型 Specialised datatypes

IP类型 IP datatype

略。

elasticsearch数据结构的更多相关文章

  1. ElasticSearch(二十七)type的数据结构

    1.什么是type? type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立.分词器field的value,在底层的lucene中建 ...

  2. elasticsearch 之 深入探秘type底层数据结构

    1.理论知识 type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立.分词器.field的value,在底层的lucene中建立索引 ...

  3. Elasticsearch 调优 (官方文档How To)

    How To Elasticsearch默认是提供了一个非常简单的即开即用体验.用户无需修改什么配置就可以直接使用全文检索.结果高亮.聚合.索引功能. 但是想在项目中使用高性能的Elasticsear ...

  4. ElasticSearch详解与优化设计

    简介 概念 安装部署 ES安装 数据索引 索引优化 内存优化 1简介 ElasticSearch(简称ES)是一个分布式.Restful的搜索及分析服务器,设计用于分布式计算:能够达到实时搜索,稳定, ...

  5. elasticsearch常用的概念整理

    节点node 节点(node)是一个运行着的Elasticsearch实例 集群中一个节点会被选举为主节点(master),它将临时管理集群级别的一些变更,例如新建或删除索引.增加或移除节点等.主节点 ...

  6. Elasticsearch 教程--数据

    在Elasticsearch中,每一个文档都有一个版本号码.每当文档产生变化时(包括删除),_version就会增大.在<版本控制>中,我们将会详细讲解如何使用_version的数字来确认 ...

  7. Elasticsearch索引(company)_Centos下CURL增删改

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch索引说明 a. 通过上面几篇博客已经将Elastics ...

  8. Elasticsearch配置详解、文档元数据

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch配置文件详解 a. 在上面博客中,我们已经安装并且成功 ...

  9. ElasticSearch基本学习

    ES介绍 维基百科使用Elasticsearch来进行全文搜做并高亮显示关键词,以及提供search-as-you-type.did-you-mean等搜索建议功能. 英国卫报使用Elasticsea ...

随机推荐

  1. jq实时监测输入框内容改变

    $(document) .on('input propertychange','#telInput',function (e) { if (e.type === "input" | ...

  2. annotation的概念及其作用

    概念 能够添加到 Java 源代码的语法元数据.类.方法.变量.参数.包都可以被注解,可用来将信息元数据与程序元素进行关联.Annotation 中文常译为“注解”. 作用 标记,用于告诉编译器一些信 ...

  3. 2018.4.26 lvm

    lvm(Logical Volume Manager)逻辑卷管理,是Linux环境下对磁盘分区进行管理的一种机制. 基本概念: 1. 物理卷-----PV(Physical Volume)物理卷在逻辑 ...

  4. telnet服务搭建

    Telnet服务器安装(centos7系统环境) 查看系统是否已安装telnet rpm -qa | grep telnettelnet-0.17-48.el6.x86_64telnet-server ...

  5. hasura graphql-engine 集成zombodb

    zombodb 是一个很不错的pg 扩展,可以方便的把es 与pg 集成起来,使用方便 ,目前尽管有一些docker 镜像 但是版本都比较老,所以基于centos7 做了一个新的docker 镜像,同 ...

  6. java_GC

    垃圾回收1    内存分配    垃圾回收    调用垃圾回收器    对象终结            调用垃圾回收器        System.gc()和Runtime.getRuntime(). ...

  7. 如何用原生js开发一个Chrome扩展程序

    原文地址:How to Build a Simple Chrome Extension in Vanilla JavaScript 开发一个Chrome扩展程序非常简单,只需要使用原生的js就可以完成 ...

  8. [转]Windows下使用VS2015编译openssl库

    转自:http://blog.csdn.net/alger_magic/article/details/52584171 目标:编译vs环境下openssl库 工具: 1. 编译环境win10+vs2 ...

  9. UEFI和GPT下硬盘克隆后的BCD引导修复

    UEFI和GPT下硬盘克隆后的BCD引导修复-Storm_Center http://www.stormcn.cn/post/1901.html 当硬盘引导换成GPT,系统启动也变成UEFI后,如果直 ...

  10. 【java】之cron表达式

    秒(~) 分钟(~) 小时(~) 天(月)(~,但是你需要考虑你月的天数) 月(~) 天(星期)(~ =SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) .年份(-) 其中每个元素 ...