elasticsearch数据结构
2017-08-18 14:36
274 查看
无论是关系型数据库还是非关系型数据库,乃至elasticsearch这种事实上承担着一定储存作用的搜索引擎,数据类型都是非常重要而基础的概念。本文基于elasticsearch 5.x版本。
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类型的字段进行排序造成的。
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
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"
true和false。但也可以接受自定义值。
float_range
long_range
double_range
date_range
ip_range
这个类型的字段可以通过两个字段来界定上下范围。
嵌套数组: [1, [2,3]] 相当于 [1,2,3]
对象数组: [{ "name": "Mary", "age": 12 },{ "name": "John", "age": 10 }]
动态添加字段时,数组中的第一个值决定字段类型。所有后续值必须是相同的数据类型,或至少可以将后续值强制转换为相同的数据类型。
不支持使用数据类型混合的数组:[10,“some string”]
数组可能包含空值,它们被配置的null_value替换或完全跳过。空数组[]被视为缺少的字段 - 没有值的字段。
在内部,该文档被索引为一个简单的,平均的键值对列表,如下所示:
真正储存如下:
您可以使用geo_shape Query查询使用此类型的文档。
核心数据类型(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
dateJSON中没有日期类型,所以在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
booleantrue和false。但也可以接受自定义值。
范围类型 Range datatypes
integer_rangefloat_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的数据结构
- elasticsearch核心知识---48.内核级知识点:深入type底层数据结构
- Elasticsearch 5.0 install & update
- Python入门:数据结构的4种基本类型
- 数据结构的一些基本操作(在表L中插入第i个元素e. 操作成功返回OK,失败时返回ERROR,删除表L中第i个元素,结果用e返回. 操作成功返回OK,失败时返回ERROR)
- Elasticsearch 02
- [数据结构]一些常见的算法思想
- fluentd结合kibana、elasticsearch实时搜索分析hadoop集群日志<转>
- 数据结构 第7章 查找
- Lock-free 多核数据结构设计
- 数据结构---线性表----循环链表和双向链表
- Hermes与开源的Solr、ElasticSearch的不同
- ElasticSearch 5.0.0 安装部署常见错误或问题
- 数据结构3.6 银行排队摸你问题 记录
- 基础数据结构:栈、队列——Python实现
- 【数据结构】之并查集简易封装
- C_数据结构
- 栈和堆的区别--(内存和数据结构)
- 数据结构(C++)顺序表的实现
- 深入理解数据结构之散列表、散列、散列函数