无论是关系型数据库还是非关系型数据库,乃至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. PythonStudy——字符串常用操作 String common operations

    # 1.字符串的索引取值: 字符串[index]# 正向取值从0编号,反向取值从-1编号 s1 = '123abc呵呵' t_s = ' # 取出c print(s1[5], s1[-3]) # 2. ...

  2. IntelliJ IDEA 2018.3 升级功能介绍

    |0前言 2018.11.28 IntelliJ IDEA 2018.3 正式版发布.对于一个忠实爱好者,迫不及待的我下载了最新版本来体验下.而且 IDEA 今年的第三次重大更新提供了不容错过的显著功 ...

  3. 浅谈JS的数组遍历方法

    用过Underscore的朋友都知道,它对数组(集合)的遍历有着非常完善的API可以调用的,_.each()就是其中一个.下面就是一个简单的例子: var arr = [1, 2, 3, 4, 5]; ...

  4. httpd基础知识

    apache简介   Apache取自"a patchy server"的读音,意思是充满补丁的服务器.Apache起初由伊利诺伊大学香槟分校的国家超级电脑应用中心(NCSA)开发 ...

  5. Linux之目录结构配置

    因为 Linux 的开发者实在太多了,如果每个人都发展出属于自己的目录配置方法, 那么将可能会造成很多管理上的困扰.所以,就有一个叫做Filesystem Hierarchy Standard (FH ...

  6. linux git pull/push时提示输入账号密码之免除设置

    1.先cd到根目录,执行git config --global credential.helper store命令 [root@iZ25mi9h7ayZ ~]# git config --global ...

  7. k8s学习笔记之一:kubernetes简介

    一.虚拟化技术 1.什么是虚拟化技术 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立 ...

  8. JavaWeb——JSTL 核心标签库使用

    JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...

  9. xsyProblem A: 密集子图(graph)

    f[i][S]三进制压缩表示最长路为i,0代表不在该集合,1代表不是最短路为i集合,2代表是最短路集合, 转移枚举i+1集合是那些, 乘以概率即可 预处理保证复杂度 #include<cstdi ...

  10. 权限管理demo-获取Spring上下文工具

    package com.mmall.common; import org.springframework.beans.BeansException; import org.springframewor ...