让java支持es6_ES6-映射(mapping)

本文介绍了Elasticsearch中的映射(Mapping)概念,它相当于数据库的表结构。映射分为动态映射和静态映射。动态映射在文档写入时自动识别字段类型,而静态映射则需要预先定义。通过示例展示了如何创建动态和静态映射,并讨论了动态映射的规则以及静态映射的必要性。
摘要由CSDN通过智能技术生成

1.mapping映射概述

我们习惯上对ElasticSearch和数据库做了一些对比,索引(index)相当于数据库,类型(type)相当于数据表,映射(Mapping)相当于数据表的表结构。

ElasticSearch中的映射(Mapping)用来定义一个文档,可以定义所包含的字段以及字段的类型、分词器及属性等等。

映射可以分为动态映射和静态映射:

动态映射:我们知道,在关系数据库中,需要事先创建数据库,然后在该数据库实例下创建数据表,然后才能在该数据表中插入数据。而ElasticSearch中不需要事先定义映射(Mapping),文档写入ElasticSearch时,会根据文档字段自动识别类型,这种机制称之为动态映射。

静态映射:在ElasticSearch中也可以事先定义好映射,包含文档的各个字段及其类型等,这种方式称之为静态映射。

2.动态映射

我们新创建一个索引information

PUT information

创建成功响应:

{

"acknowledged": true,

"shards_acknowledged": true,

"index": "information"

}

查看mapping结构:

GET information/_mapping

查询到mapping结构为空:

{

"information": {

"mappings": {}

}

}

插入文档信息:

PUT information/record/1

{

"ip":"10.192.168.4",

"attack_type":"scan_ip",

"count": 400,

"create_time":"2018-03-07 00:00:00"

}

创建成功:

{

"_index": "information",

"_type": "record",

"_id": "1",

"_version": 1,

"result": "created",

"_shards": {

"total": 2,

"successful": 2,

"failed": 0

},

"_seq_no": 0,

"_primary_term": 1

}

然后我们再次查询mapping结构:

{

"information": {

"mappings": {

"record": {

"properties": {

"attack_type": {

"type": "text",

"fields": {

"keyword": {

"type": "keyword",

"ignore_above": 256

}

}

},

"count": {

"type": "long"

},

"create_time": {

"type": "text",

"fields": {

"keyword": {

"type": "keyword",

"ignore_above": 256

}

}

},

"ip": {

"type": "text",

"fields": {

"keyword": {

"type": "keyword",

"ignore_above": 256

}

}

}

}

}

}

}

}

在添加文档时ElasticSearch会推测添加文档中每个属性字段是什么类别:

record推测结果:

attack_type:text类型

count:long类型

create_time:text类型(实际应该为date类型,推测并不是非常准确)

ip:text类型

3.动态映射规则

动态映射可以帮助我们在创建索引后直接将文档数据写入ElasticSearch,让我们尽快享受到ElasticSearch检索功能。在实际项目中,如果在导入数据前不能确定包含哪些字段或者不方便确定字段类型,可以使用动态映射。当向ElasticSearch写入一个新文档时,需要一个之前没有的字段,会通过动态映射来推断该字段类型。

JSON数据

自动推测的类型

null

没有字段被添加

true或false

boolean型

小数

float型

数字

long型

日期

date或text

字符串

text

数组

由数组第一个非空值决定

JSON对象

object类型

4.静态映射

动态映射的自动类型推测功能并不是100%正确的,这就需要静态映射机制。静态映射与关系数据库中创建表语句类型,需要事先指定字段类型。相对于动态映射,静态映射可以添加更加详细字段类型、更精准的配置信息等。

新建静态映射:

首先删除已经创建的information索引,然后再创建索引是定义mapping结构

PUT information

{

"mappings": {

"record":{

"properties": {

"ip":{"type": "text"},

"count":{"type": "long"},

"create_type":{"type": "date"},

"i_type":{"type": "text"}

}

}

}

}

执行成功:

{

"acknowledged": true,

"shards_acknowledged": true,

"index": "information"

}

查看索引mapping结构:

GET information/_mapping

响应结果:

{

"information": {

"mappings": {

"record": {

"properties": {

"count": {

"type": "long"

},

"create_type": {

"type": "date"

},

"i_type": {

"type": "text"

},

"ip": {

"type": "text"

}

}

}

}

}

}

类型是Elasticsearch的一个设计失误,6.0开始后面的版本将不再支持,在6.x中创建的索引只允许每个索引有单一类型。任何名字都可以用于这个类型,但是只能有一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值