4、Elasticsearch数据类型

2023-11-07

一、Elasticsearch时区类型

Elasticsearch时区划分:GMT 格林威治标准时间  默认时区UTC 世界协调时、DST 夏日节约时间、CST 中国标准时间

二、Elasticsearch Mapping结构

Mapping结构
类似于数据库中的表结构定义,主要作用如下:
1、定义Index下字段名(Field Name)
2、定义字段的类型,比如数值型,字符串型、布尔型、Date、geo_point
3、定义倒排索引的相关配置,比如是否索引、记录postion等
需要注意的是,在索引中定义太多字段可能会导致索引膨胀,出现内存不足和难以恢复的情况,下面有几个设置:
4、index.mapping.total_fields.limit:一个索引中能定义的字段的最大数量,默认是 1000
5、index.mapping.depth.limit:字段的最大深度,以内部对象的数量来计算,默认是20
6、index.mapping.nested_fields.limit:索引中嵌套字段的最大数量,默认是50

"mappings" : { "vem_order_type" : { "properties" : { "buyerPayMoney" : { "type" : "long" }}}}}

三、Elasticsearch 数据类型

1、字符串类型

Text  全文搜索(会被分词),如果进行聚合、排序计算需要开启fielddata进行内存预加载,不建议此使用方法

 Keyword  精确值进行过滤、排序、聚合等操作时, 就应该使用keyword类型,不会被分词

2、数字类型

数字类型如下:long、integer、short、byte、double、float、half_float、scaled_float尽可能选择范围小的数据类型, 字段的长度越短, 索引和搜索的效率越高,尽可能避免浮点类型,如果必须使用优先考虑使用带缩放因子的浮点类型.

Byte有符号的8位整数: 数字范围 [-128 ~ 127]

Short有符号的16位整数:数字范围 [-32768 ~ 32767]

Integer有符号的32位整数:范围: [−231 ~ 231-1]

Long有符号的64位整数: 范围: [−263 ~ 263-1]

Float32位单精度浮点数

Double64位双精度浮点数

Half_float16位半精度IEEE754浮点类型

Scaled_float缩放类型的的浮点数: 比如price字段只需精确到分, 57.34缩放因子为100, 存储结果为5734

3、Date日期格式

1、系统需要指定默认时区

如果时区未指定, 日期将被转换为UTC格式, 但存储的却是长整型的毫秒值,可以自定义日期格式, 若未指定, 则使用默认格式: strict_date_optional_time||epoch_millis

2、多种日期格式支持

多个格式使用双竖线||分隔, 每个格式都会被依次尝试, 直到找到匹配的.第一个格式用于将时间毫秒值转换为对应格式的字符串. 可选择以下格式:"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"

PUT website
{
    "mappings": {
        "blog": {
            "properties": {
                "date": {
                    "type": "date",  
                    "format": "yyyy-MM-dd HH:mm:ss"
                }
            }
        }
    }
}

日期纳秒

PUT my_index?include_type_name=true
{
  "mappings": {
    "_doc": {
      "properties": {
        "date": {
          "type": "date_nanos"}}}}}

4、布尔型boolean

可以接受表示真、假的字符串或数字: 真值: true,"1",假值: false, "0"

5、Binary:binary

 二进制类型是Base64编码字符串的二进制值, 不以默认的方式存储, 且不能被搜索. 有2个设置项:
 doc_values: 该字段是否需要存储到磁盘上、方便以后用来排序、聚合或脚本查询. 接受true和false(默认);
 store: 该字段的值是否要和_source分开存储、检索, 意思是除了_source中, 是否要单独再存储一份. 接受true或false(默认).

6、范围类数据类型Range

范围类数据类型有以下类型:integer_range、float_range、long_range、double_range、date_range
Range类型支持以下几种:
数据类型取值范围integer_range−231 ~ 231−1、long_range−263 ~ 263−1、float_range32位单精度浮点型double_range64位双精度浮点型date_range64位整数, 毫秒计时ip_rangeIP值的范围, 支持IPV4和IPV6, 或者这两种同时存在

Range数据结构:

PUT company
{
    "mappings": {
        "department": {
            "properties": {
                "expected_number": {  // 预期员工数
                    "type": "integer_range"
                },
                "time_frame": {       // 发展时间线
                    "type": "date_range", 
                    "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                },
                "ip_whitelist": {     // ip白名单
                    "type": "ip_range"
                }
            }
        }
    }
}

Range数据添加

PUT company/department/1
{
    "expected_number" : {
        "gte" : 10,
        "lte" : 20
    },
    "time_frame" : { 
        "gte" : "2018-10-01 12:00:00", 
        "lte" : "2018-11-01"
    }, 
    "ip_whitelist": "192.168.0.0/16"
}

Range查询数据:

GET company/department/_search
{
    "query": {
        "term": {
            "expected_number": {
                "value": 12
            }
        }
    }
}
GET company/department/_search
{
    "query": {
        "range": {
            "time_frame": {
                "gte": "208-08-01",
                "lte": "2018-12-01",
                "relation": "within" 
            }
        }
    }
}


7、复杂数据类型

1、Object对象类型

JSON文档是分层的: 文档可以包含内部对象, 内部对象也可以包含内部对象.
Object数据结构:

PUT employee
{
    "mappings": {
        "developer": {
            "properties": {
                "name": { "type": "text", "index": "true" }, 
                "address": {
                    "properties": {
                        "region": { "type": "keyword", "index": "true" },
                        "location": {
                            "properties": {
                                "province": { "type": "keyword", "index": "true" },
                                "city": { "type": "keyword", "index": "true" }
                            }
                        }
                    }
                }
            }
        }
    }
}

Object数据存储:

//数据存储方式一
{
    "name":                       "ma_shoufeng",
    "address.region":             "China",
    "address.location.province":  "GuangDong", 
    "address.location.city":      "GuangZhou"
}


//数据存储方式二
PUT employee/developer/1
{
    "name": "ma_shoufeng",
    "address": {
        "region": "China",
        "location": {"province": "GuangDong", "city": "GuangZhou"}
    }
}

8、Nested对象嵌套类型

嵌套类型是对象数据类型的一个特例, 可以让Array类型的对象被独立索引和搜索.
1. 对象数组是如何存储的
1>添加数据:

PUT game_of_thrones/role/1
{
    "group": "stark",
    "performer": [
        {"first": "John", "last": "Snow"},
        {"first": "Sansa", "last": "Stark"}
    ]
}

2>内部存储结构:

{
    "group":              "stark",
    "performer.first": [ "john", "sansa" ],
    "performer.last":  [ "snow", "stark" ]
}

3> 存储分析:
可以看出, user.first和user.last会被平铺为多值字段, 这样一来, John和Snow之间的关联性就丢失了.
在查询时, 可能出现John Stark的结果.
2.用nested类型解决object类型的不足
如果需要对以最对象进行索引, 且保留数组中每个对象的独立性, 就应该使用嵌套数据类型.
—— 嵌套对象实质是将每个对象分离出来, 作为隐藏文档进行索引.
1> 创建映射:

PUT game_of_thrones
{
    "mappings": {
        "role": {
            "properties": {
                "performer": {"type": "nested" }
            }
        }
    }
}

2>添加数据:

PUT game_of_thrones/role/1
{
    "group" : "stark",
    "performer" : [
        {"first": "John", "last": "Snow"},
        {"first": "Sansa", "last": "Stark"}
    ]
}

3>检索数据:

GET game_of_thrones/_search
{
    "query": {
        "nested": {
            "path": "performer",
            "query": {
                "bool": {
                    "must": [
                        { "match": { "performer.first": "John" }},
                        { "match": { "performer.last":  "Snow" }} 
                    ]
                }
            }, 
            "inner_hits": {
                "highlight": {
                    "fields": {"performer.first": {}}
                }
            }
        }
    }
}

9、地理数据类型

1、Geo-point

geo_point 地理点类型:地理点类型用于存储地理位置的经纬度对, 可用于:查找一定范围内的地理点;通过地理位置或相对某个中心点的距离聚合文档;将距离整合到文档的相关性评分中;通过距离对文档进行排序.
添加映射:

PUT employee
{
    "mappings": {
        "developer": {
            "properties": {
                "location": {"type": "geo_point"}
            }
        }
    }
}


2、Geo-shape: geo_shape (地理形状类型)

地图的相交、包含,后续demo完善

10、 特殊数据类型

1、IP:  ip (IPv4 和 IPv6 地址)
2、Completion类型:completion (to provide auto-complete suggestions)
3、Token count:token_count (to count the number of tokens in a string)
4、mapper-murmur3:murmur3(to compute hashes of values at index-time and store them in the index)
5、mapper-annotated-text:annotated-text (to index text containing special markup (typically used for identifying named entities))
6、Percolator:(Accepts queries from the query-dsl)
7、Join:(Defines parent/child relation for documents within the same index)
8、Alias:(Defines an alias to an existing field.)
9、Rank feature:(Record numeric feature to boost hits at query time.)
10、Rank features:(Record numeric features to boost hits at query time.)
11、Dense vector:(Record dense vectors of float values.)
12、Sparse vector:(Record sparse vectors of float values.)
13、Search-as-you-type:(A text-like field optimized for queries to implement as-you-type completion)
14、Multi-fields
        Multi-fields 通常用来以不同的方式或目的索引同一个字段。比如,一个字符串类型字段可以同时被映射为 text 类型以用于全文检索、 keyword字段用于排序或聚合。又或者,你可以用standard分析器、english分析器和french分析器来索引同一个 text字段。
         
优秀博文参考

  1.  elasticsearch6.4数据类型官方文档
  2.  elasticsearch的数据类型使用规则
  3.  elasticsearch 6.x Mapping设置
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4、Elasticsearch数据类型 的相关文章

随机推荐

  • 快速搜索Wox工具之Everything Client没有运行报错,解决办法!

    一直在用的一款快速搜索神器 Wox 但是在使用过程中出现一个报错 报错如下 Everything Client 没有运行 令我很烦 百度了一下 试了很多方法 还是不能发挥它的最大功效 由于我是一个好学的人 一直追踪这个问题 并寻求解决 终于
  • QT---QMainWindow初始化顺序

    C 构造 先子类以及成员 再父类以及成员 析构的顺序就是构造顺序的逆序 就是先析构父类 再析构子类 先析构本类 再析构本类的成员 QT 1 控件类 gt 控件提升类 gt QMainWindow类 2 子窗体的构造函数中初始化了父窗体的pa
  • 【log4j】

    文章目录 log4j 简介 组成 日志级别 log4j使用 占位符 log4j web 简介 Log4J 是 Apache 的一个开源项目 官网 http jakarta apache org log4j 通过在项目中使用 Log4J 我们
  • DC-UNet:重新思考UNet架构和双通道高效CNN医学图像

    摘要 经典UNet的体系架构在某些方面存在着局限性 因此本文对其结构提出了改进 1 设计高效的CNN架构来取代编码器和解码器 2 在最先进的U Net模型的基础上 应用残差模块来取代编码器和解码器之间的跳过连接来进行改进 医学图像分割是通过
  • eclipse编译慢 提高eclipse的性能

    编译慢原因有多种 其中可以通过修改eclipse ini文件设置缓存大小 并将工作空间的validation的多项验证去除 因为这些验证也为在编译时被执行 只保留几个必须的 我就只设置了xml验证 关闭checking for update
  • Spring Boot —Cache使用

    1 Spring缓存抽象 Spring从3 1开始定义了org springframework cache Cache和org springframework cache CacheManager接口来统一不同的缓存技术 并支持使用JCac
  • emcas利用矩形编辑在每行添加序列数字

    参考文章 http xahlee info emacs emacs emacs string rectangle ascii art html 通过阅读文章利用rectangle number lines函数实现 通过 查询文档发现 其绑定
  • matlab2016a贝叶斯工具箱,【Matlab】贝叶斯网络工具箱简介

    本文主要参考 以及自己对该工具箱的一点认识 通过借助该工具箱中的一个测试函数 k2demo1 m 了解整个贝叶斯网络工具箱的使用 1 给定一个贝叶斯网络结构 N 4 节点个数 即参数的个数 dag zeros N N C 1 S 2 R 3
  • 怎样使用vs2019 开始自己的第一个C++程序

    怎样使用vs2019 开始自己的第一个C 程序 一 新建项目 1 点击菜单栏 gt 文件 gt 新建 gt 项目 1 我们可以看到上方存在的语言 平台和项目类型的选项 语言这里我们就选择C 如果有需要可以选择所有语言 2 平台我们就选择wi
  • 07-----git add . 失败(warning: You ran ‘git add‘ with neither ‘-A (--all)‘ or ‘--ignore-removal‘)

    1 分析原因并解决 出错原因 远程仓库修改或者删除文件 而没有在本地更新 解决 git status 查看对应状态 git add A 或者 git add all 解决问题
  • linux 分区 dev,linux-kernel – 是/ dev / dm-1分区还是整个块设备?

    每个分区都是一个 整体 的块设备 您可以对任何分区进行子分区 然后再次对其进行子分区 然后再次 在您的示例中 dm 1可以映射到任何东西 原始设备 dmcrypt设备抽象 MD RAID支持的多路径 dm加密卷组上的逻辑卷 当设备初始化时
  • 浅浅写一下PPOCRLabel的使用及体验

    依赖包 我是基于之前建立好的paddle env环境 因此在使用过程中实际上 根据报错 需要的包只有这两个 pip install xlrd pip install PyQt5 关于报错的话 ModuleNotFoundError No m
  • Kettle案例——数据去重-不完全去重

    1 通过使用Kettle工具 创建一个转换 并添加 CSV文件输入 控件 唯一行 哈希值 控件以及Hop跳连接线 具体如图所示 2 单击 浏览 按钮 选择要进行完全去重处理的CSV文件merge csv 再单击 获取字段 按钮 Kettle
  • Java加密技术(十)——单向认证

    在 Java 加密技术 九 中 我们使用自签名证书完成了认证 接下来 我们使用第三方CA签名机构完成证书签名 这里我们使用 thawte 提供的测试用21天免费ca证书 1 要在该网站上注明你的域名 这里使用 www zlex org 作为
  • python图片对比并确定_python如何对比图像的区别

    python对比图像的区别方法 首先使用 pylab imread 读取图片 然后使用 matplotlib pylab plt imshow 显示图片 接着灰度图与RGB图相互转换 最后保存图片即可 相关学习推荐 python教程 pyt
  • Jmeter 压测工具的安装及使用

    目录 一 简介 二 下载 三 安装 四 启动 五 使用 1 调整界面显示大小 2 添加线程组 3 添加 HTTP 请求 4 添加 HTTP 请求头 5 保存压测配置 6 启动压测 7 查看结果树 8 查看聚合报告 六 补充 1 设置中文 2
  • 阿里云源 Python、npm、git、goproxy

    阿里云源 Python npm git goproxy 各种设置源的方式也都比较常见 但是根本记不住 每次都查感觉也不太好 正好发现了个宝藏地址 看起来还挺全的 以后找源也可以先在这个地方翻翻 顺便就搞了几个放到一个脚本里边 脚本内容 py
  • xxl-job项目集成到springBoot

    源码 http www xuxueli com xxl job id E4 B8 80 E3 80 81 E7 AE 80 E4 BB 8B 一初始化数据库 脚本位置 xxl job doc db tables xxl job sql xx
  • C++11中的std::function

    文章转载自 http www jellythink com archives 771 看看这段代码 先来看看下面这两行代码 std function
  • 4、Elasticsearch数据类型

    一 Elasticsearch时区类型 Elasticsearch时区划分 GMT 格林威治标准时间 默认时区 UTC 世界协调时 DST 夏日节约时间 CST 中国标准时间 二 Elasticsearch Mapping结构 Mappin