申博Sunbet

申博Sunbet www.sunbet88.us是Sunbet指定的Sunbet官网,Sunbet提供Sunbet(Sunbet)、Sunbet、申博 *** 合作等业务。

,

本文案例操作,建议先阅读我之前的文章《ElasticSearch之安装及基本操作API》

Mapping (映射)类似关系型数据库中的表的结构定义。我们将数据以 *** ON 格式存入到 ElasticSearch 中后,在搜索引擎中 *** ON 字段映射对应的类型,这时需要 mapping 来定义内容的类型。

字段类型

*** ON 数据类型映射到 ElasticSearch 定义的类型,常用的简单类型有:

*** ON类型 ElasticSearch 类型
文本类型 Text/Keyword
整数类型 long/integer
浮点类型 float/double
时间类型 date
布尔值 boolean
数组 Text/Keyword

上面要注意的是时间类型, *** ON 中并没有时间类型,这里主要指时间格式数据的类型。

定义映射

在关系型数据库中,存储数据之前,我们会先创建表结构,给字段指定一个存在的类型。同样 ElasticSearch 在进行数据存储前,也可以先定义好存储数据的 Mapping 结构。
先定义一个简单的 person Mapping:

上图中就是一个 Mapping 的定义,如果是在 ElasticSearch7 之前,mappings 里还有 _type 属性。

动态映射

当没有事先定义好 Mapping,添加数据时,ElasticSearch 会自动根据字段进行换算出对应的类型,但是换算出来的类型并不一定是我们想要的字段类型,还是需要人为的干预进行修改成想要的 Mapping。

更新映射

使用 dynamic 控制映射是否可以被更新。

dynamic-true

设置 dynamic 为true是默认 dynamic 的默认值,新增字段数据可以写入,同时也可以被索引,Mapping 结构也会被更新。

添加数据,同时多添加一个没被定义的 gender 字段。

# 向 person 中添加数据
PUT person/_doc/1
{
  "uId": 1,
  "name": "ytao",
  "age": 18,
  "address": "广东省珠海市",
  "birthday": "2020-01-15T12:00:00Z",
  "money": 108.2,
  "isStrong": true,
  "gender": "男"    # Mapping 中未定义的字段
}

添加成功,搜索 gender 字段:

查看 Mapping 结构:

新添加的字段值,在添加过程中 Mapping 已自动添加字段。

dynamic-false

设置 dynamic 为false时,新增字段数据可以写入,不可以被索引,Mapping 结构会被更新。
同样先将 dynamic 设置为 false,然后向里面添加数据,其他步骤和上面 true 操作一样。定义 Mapping,添加数据。
搜索 gender 字段:

此时新增字段数据无法被索引,但数据可以写入。

Mappnig 也不会添加新增的字段:

dynamic-strict

设置 dynamic 为strict时,从字面上意思也可以看出,对于动态映射是较严格的,新增字段数据不可以写入,不可以被索引,Mapping 结构不会被更新。只能按照定义好的 Mapping 结构添加数据。
在添加新字段数据时,就马上会抛出异常:

自动识别日期类型

上文中,当 dynamic 设置为 true 时,添加新字段数据自动识别类型更新 Mapping,如果是日期类型的话,我们是可以指定识别的类型。
指定 person 的 dynamic_date_formats 格式:

PUT person/_mapping
{
  "dynamic_date_formats": ["yyyy/MM/dd"]
}

这里是可以指定多个时间格式。
向 person 添加新数据,分别是 today 和 firstDate:

PUT person/_doc/2
{
  "today": "2020-01-15",
  "firstDate": "2020/01/15"
}

添加新字段数据后的 Mapping:

由于上面我们指定了时间格式为 yyyy/MM/dd 时是可以识别为时间格式,所以 today 字段的值为 yyyy-MM-dd 格式无法识别为时间类型,判为 text 类型。

多字段

Mapping 中可以定义 fields 多字段属性,以满足不同场景下的实现。比如 address 定义为 text 类型,fields 里面又有定义 keyword 类型,这里主要是区分两个不同不同使用场景。

  • text 会建立分词倒排索引,用于全文检索。
  • keyword 不会建立分词倒排索引,用于排序和聚合。

添加数据:

# 向 person 中添加数据
PUT person/_doc/1
{
  "uId": 1,
  "name": "ytao",
  "age": 18,
  "address": "广东省珠海市",
  "birthday": "2020-01-15T12:00:00Z",
  "money": 108.2,
  "isStrong": true
}

查询address数据。

查询address.keyword数据。

通过keyword检索时,由于不会建立分词索引,并没有获取到数据。

控制索引

在字段中使用 index 指定当前字段索引是否能被搜索到。指定类型为 boolean 类型,false 为不可搜索到,true 为可以搜索到。
先删除之前的 Mapping:

DELETE person

创建 Mapping,设置name属性的 index 为 false。

再次添加上面的数据后搜索name字段:

字段 index 设置 false 后,由于没有被索引,所以搜索无法获取到索引。

空值处理

现在向 ElasticSearch 中添加一条 address 为空的数据:

PUT person/_doc/2
{
  "uId": 2,
  "name": "Jack",
  "age": 22,
  "address": null,
  "birthday": "2020-01-15T12:00:00Z",
  "money": 68.7,
  "isStrong": true
}

搜索 address.keyword 为空的数据:

搜索返回异常,默认是不被允许搜索 NUll。
这是需要在 Mapping 指定 null_value 属性,并且不能在text类型中声明。

搜索 address.keyword 为空的数据:

设置 "null_value": "NULL" 后,空值可以处理搜索。

聚合多个字段

聚合多个字段放到一个索引中,使用 copy_to 进行聚合。例如我们在多字段查询中,这是不需要对每个字段进行过滤筛选,只需对聚合字段即可。
在使用 copy_to 时,是通过指定聚合的名称实现。

实际上,copy_to 不使用数组格式添加名称,也会自动转换成数据格式。

添加两条数据,待校验搜索:

# 向 person 中添加数据
PUT person/_doc/1
{
  "uId": 1,
  "name": "ytao",
  "age": 18,
  "address": "广东省珠海市",
  "birthday": "2020-01-15T12:00:00Z",
  "money": 108.2,
  "isStrong": true
}

PUT person/_doc/2
{
  "uId": 2,
  "name": "杨广东",
  "age": 22,
  "address": null,
  "birthday": "2020-01-15T12:00:00Z",
  "money": 68.7,
  "isStrong": true
}

查询 full_name 的值,会返回 name 和 address 相关的值的对象。

从上面返回结果看到,_source 中的字段没有增加相应的 copy_to 字段名,所以 copy_to 只会拷贝字段内容至索引,并不会改变包含的字段。

总结

通过本文对创建 Mapping 文件的常用并且实用的操作介绍,也基本能掌握这些日常的使用。了解 Mapping 的功能操作,相信对存储时的设计也有一定帮助。

个人博客: https://ytao.top
关注公众号 【ytao】,更多原创好文

USDT官网接口声明:该文看法仅代表作者自己,与本平台无关。转载请注明:长治人才网:ElasticSearch之映射常用操作
发布评论

分享到:

choi baccarat:“梅黑”请闭嘴,谁说梅西踢球不防守,球场上这一项数据完爆C罗
7 条回复
  1. 卡利
    卡利
    (2020-12-10 00:00:13) 1#

    欧博官网www.allbetgame.us欢迎进入欧博官网(Allbet Game),欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。爽快,喜欢不拖的情节

    1. Usappledeveloperaccountsforsale
      Usappledeveloperaccountsforsale
      (2020-12-11 17:19:37)     

      我婆婆今天一大早管我要2000元生活费,说一分钱都不能少。我好声好气跟她商量,能不能下个月再一起给,她却坚决不肯答应。我实在是没招了,只好把这个皮球踢给我老公,结果却发现了一个让我非常惊讶的秘密。我是一名销售,今年32岁,我老公是一名普通的建筑工人,我的工资一直都是比我老公要高,所以在家里话语权也比较大,老公的工资也是一直交给我管。去年我家公生病了,花了不少的医药费,家里一下子变得有些揭不开锅。过后老公和婆婆就轮流教育我,说我平时肯定是花钱大手大脚,不然家里不可能只剩下那么一点钱。我也知道自己花钱确实比较大手大脚,可是我真的很难控制住自己,而且家里本来开销也是比较大,很多根本没办法节省。我小时候家里就很穷,经常没有钱可以买零食,当时我就跟自己说,以后一定要有能力,可以想买什么就买什么,不用为了节省几块钱而纠结很久。我跟我老公说了我想法后,他表示了理解和支持。婆婆虽然没有反对,不过她提出了一个条件,就是要我每个月都拿2000块生活费给她,那么她以后就不干预我怎么花钱。我想了一下,2000块差不多是我工资的五分之一,在我可以接纳的范围内,所以我就答应了。让我没想到的是,这次疫情来的那么凶猛,公司业务受影响很大,直接停工了一个月,也就是我没了一个月的工资,如果这个时候还要拿2000元给婆婆,这个月接下来的生活费可能就不够了。我不知道怎么办,就跟老公求助。结果老公跟我说,其实婆婆并不是真的要拿这个生活费,她就是怕我平时没有攒钱,到了紧要关头就没钱可以花。说着,老公从抽屉里拿出了一个信封,里面装着一沓钱,我数了一下,总共是14000元整。14000元,也就是刚好我给婆婆7个月生活费的总和!没想到婆婆竟然一分钱没花,都给我们攒着!那一刻我的泪水再也没控制住,我怎么忘了,婆婆也是妈!妈都是为自己的孩子考虑着想的啊!婆婆对我们的爱,我只能用余生,好好去报答她了!希望这个世界上的婆媳,都能相处得越来越融洽!(网友投稿)我是@末名情感,每天给大家分享不同人的情感故事,如果你在故事当中看到了自己的影子,欢迎评论留言,也欢迎大家给故事的主人公留下你们的宝贵建议。,爱情麻辣烫, ,我要上头条, ,情感, 原来这里这么好玩

    2. 环球UG
      环球UG
      (2020-12-11 18:15:52)     

      联博开奖网www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。可以,能感觉到画风

      1. USDT充值接口
        USDT充值接口
        (2021-01-17 23:38:17)     


        欧博
        难怪好多人夸

        1. ABG视讯
          ABG视讯
          (2021-02-23 18:52:34)     

          皇冠足球appwww.huangguan.us是一个提供皇冠代理APP下载、皇冠会员APP下载、皇冠体育最新登录线路、新2皇冠网址的的体育平台。新皇冠体育官网是多年来值得广大客户信赖的平台,我们期待您的到来!开始阅读......

  2. 币游
    币游
    (2020-12-17 00:00:21) 2#

    电银付APP下载(dianyinzhifu.com)是官方网上推广平台。在线自动销售电银付激活码、电银付POS机。提供电银付安装教程、电银付使用教程、电银付APP使用教程、电银付APP安装教程、电银付APP下载等技术支持。面对全国推广电银付加盟、电银付大盟主、电银付小盟主业务。天哪,我被吸引住了

  3. 皇冠足球app
    皇冠足球app
    (2021-01-20 00:00:26) 3#

    展望2021新计画,他透露,今年8月将建立「凯撒厨卫生活馆」,抢攻电商市场,另外抢攻新建市场。同时看准防疫商机,将开发一系列的抗疫产物,以举行市场区隔。为你开的流量

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。