zoukankan      html  css  js  c++  java
  • elasticsearch数据结构

    无论是关系型数据库还是非关系型数据库,乃至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

    略。

  • 相关阅读:
    select into 和 insert into select 两种表复制语句
    hql to_number
    Oracle密码过期the password has expired解决办法
    SQL脚本修改表结构
    JSP -- EL表达式
    cascade属性
    FetchType与FetchMode的区别
    @OneToMany、@ManyToOne以及@ManyToMany讲解
    Jackson实现Object对象与Json字符串的互转
    Python 编码规范
  • 原文地址:https://www.cnblogs.com/eryuan/p/7389352.html
Copyright © 2011-2022 走看看