• ES数据类型


    整体数据类型结构:
    在这里插入图片描述

    String 类型

    主要分为text与keyword两种类型。两者区别主要在于能否分词。
    text类型

    "mappings": {
    "properties": {
    "name": {
    "type": "text"
    },
    "price": {
    "type": "long"
    },
    "count": {
    "type": "long"
    },
    "address": {
    "type": "text"
    }
    }
    }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    会进行分词处理, 分词器默认采用的是standard。
    keyword类型
    不会进行分词处理。在ES的倒排索引中存储的是完整的字符串

    Date时间类型

    数据库里的日期类型需要规范具体的传入格式, ES是可以控制,自适应处理。
    传递不同的时间类型:

    PUT my_date_index/_doc/1
    { "date": "2021-01-01" }
    PUT my_date_index/_doc/2
    { "date": "2021-01-01T12:10:30Z" }
    PUT my_date_index/_doc/3
    { "date": 1520071600001 }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    查看日期数据:

    GET my_date_index/_mapping
    
    • 1

    在这里插入图片描述
    ES的Date类型允许可以使用的格式有:

    yyyy-MM-dd HH:mm:ss
    yyyy-MM-dd
    epoch_millis(毫秒值)

    复合类型

    复杂类型主要有三种: Array、object、nested。
    Array类型: 在Elasticsearch中,数组不需要声明专用的字段数据类型。但是,在数组中的所有值都必须具有相同的数据类型。举例:

    POST orders/_doc/1
    {
    //插入失败,因为有一个不同类型
    "goodsName":["足球","篮球","兵乓球", 3]
    }
    POST orders/_doc/1
    {
    //插入成功
    "goodsName":["足球","篮球","兵乓球"]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    object类型: 用于存储单个JSON对象, 类似于JAVA中的对象类型, 可以有多个值, 比如LIST,可以包含多个对象。
    但是LIST只能作为整体, 不能独立的索引查询。举例:

    # 新增第一组数据, 组别为美国,两个人。
    POST my_index/_doc/1
    {
    "group" : "america",
    "users" : [
    {
    "name" : "John",
    "age" : "22"
    },
    {
    "name" : "Alice",
    "age" : "21"
    }
    ]
    }
    # 新增第二组数据, 组别为英国, 两个人。
    POST my_index/_doc/2
    {
    "group" : "england",
    "users" : [
    {
    "name" : "lucy",
    "age" : "21"
    },
    {
    "name" : "John",
    "age" : "32"
    }
    ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    这两组数据都包含了name为John,age为21的数据,
    采用这个搜索条件, 实际结果:
    在这里插入图片描述
    结果可以看到, 这两组数据都能找出,因为每一组数据都是作为一个整体进行搜索匹配, 而非具体某一条数据。

    Nested类型
    用于存储多个JSON对象组成的数组, nested 类型是 object 类型中的一个特例,可以让对象数组独立索引和查询。
    举例:
    创建nested类型的索引:

    PUT my_index
    {
    "mappings": {
    "properties": {
    "users": {
    "type": "nested"
    }
    }
    }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    发出查询请求:
    在这里插入图片描述
    采用以前的条件, 这个时候查不到任何结果, 将年龄改成22, 就可以找出对应的数据:
    在这里插入图片描述

    GEO地理位置类型
    现在大部分APP都有基于位置搜索的功能, 比如交友、购物应用等。这些功能是基于GEO搜索实现的。
    对于GEO地理位置类型,分为地图:Geo-point, 和形状:Geo-shape 两种类型。
    在这里插入图片描述

    创建地理位置索引:

    PUT my_locations
    {
    "mappings": {
    "properties": {
    "location": {
    "type": "geo_point"
    }
    }
    }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    添加地理位置数据:
    在这里插入图片描述
    需求:搜索出距离我{“lat” : 40,“lon” : -70} 200km范围内的人:
    在这里插入图片描述

  • 相关阅读:
    合并区间(C++解法)
    前后端分离毕设项目之产业园区智慧公寓管理系统设计与实现(内含源码+文档+教程)
    SpringBoot整合oceanbase,实现oracle无缝切换到oceanbase
    CPF 使用C#的Native AOT 发布程序
    使用 Vue CLI 脚手架生成 Vue 项目
    MySQL数据库与表管理《三国志》为例
    Kotlin高仿微信-第9篇-单聊-文本
    【JavaScript—数组】详解js数组一篇文章吃透js-数组
    智慧建筑BIM解决方案-最新全套文件
    使用pocsuite3模块编写poc脚本
  • 原文地址:https://blog.csdn.net/qq_21040559/article/details/125835659