(五)ElasticSearch 6.1.1数据类型

1、elasticsearch的数据类型

1.1、核心数据类型

1.1.1、字符串类型(string不再支持)

当一个字段需要用于全文搜索(会被分词), 比如产品名称、产品描述信息, 就应该使用text类型.
text的内容会被分词, 可以设置是否需要存储: “index”: “true|false”.
text类型的字段不能用于排序, 也很少用于聚合.

PUT website
{"mappings": {"blog": {"properties": {"summary": {"type": "text", "index": "true"}}}}
}

当一个字段需要按照精确值进行过滤、排序、聚合等操作时, 就应该使用keyword类型.
keyword的内容不会被分词, 可以设置是否需要存储: “index”: “true|false”.

PUT website
{"mappings": {"blog": {"properties": {"tags": {"type": "keyword", "index": "true"}}}}
}

1.1.2 数字类型

类型说明
byte有符号的8位整数, 范围: [-128 ~ 127]
short有符号的16位整数, 范围: [-32768 ~ 32767]nteger
integer有符号的32位整数, 范围: [−231 ~ 231-1]
long有符号的64位整数, 范围: [−263 ~ 263-1]
float32位单精度浮点数
double64位双精度浮点数
half_float16位半精度IEEE 754浮点类型
scaled_float缩放类型的的浮点数, 比如price字段只需精确到分, 57.34缩放因子为100, 存储结果为5734
PUT shop
{"mappings": {"book": {"properties": {"name": {"type": "text"},"quantity": {"type": "integer"},  // integer类型"price": {"type": "scaled_float",       // scaled_float类型"scaling_factor": 100}}}}
}

1.1.3 日期类型 - date

JSON没有日期数据类型, 所以在ES中, 日期可以是:

包含格式化日期的字符串, “2018-10-01”, 或"2018/10/01 12:10:30".
代表时间毫秒数的长整型数字.
代表时间秒数的整数.

// 添加映射
PUT website
{"mappings": {"blog": {"properties": {"pub_date": {"type": "date"}   // 日期类型}}}
}// 添加数据
PUT website/blog/11
{ "pub_date": "2018-10-10" }PUT website/blog/12
{ "pub_date": "2018-10-10T12:00:00Z" }	// Solr中默认使用的日期格式PUT website/blog/13
{ "pub_date": "1589584930103" }	

1.2、复杂数据类型

1.2.1 数组类型 - array

ES中没有专门的数组类型, 直接使用[]定义即可;

数组中所有的值必须是同一种数据类型, 不支持混合数据类型的数组:
① 字符串数组: [“one”, “two”];
② 整数数组: [1, 2];
③ 由数组组成的数组: [1, [2, 3]], 等价于[1, 2, 3];
④ 对象数组: [{“name”: “Tom”, “age”: 20}, {“name”: “Jerry”, “age”: 18}].

  • 动态添加数据时, 数组中第一个值的类型决定整个数组的类型;
  • 不支持混合数组类型, 比如[1, “abc”];
  • 数组可以包含null值, 空数组[]会被当做missing field —— 没有值的字段

1.2.2 对象类型 - object

JSON文档是分层的: 文档可以包含内部对象, 内部对象也可以包含内部对象.

# 添加示例
PUT employee/developer/1
{"name": "ma_shoufeng","address": {"region": "China","location": {"province": "GuangDong", "city": "GuangZhou"}}
}
# 存储方式
{"name":                       "ma_shoufeng","address.region":             "China","address.location.province":  "GuangDong", "address.location.city":      "GuangZhou"
}# 文档的映射结构
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" }}}}}}}}
}

1.2.3 嵌套类型 - nested

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

# 添加数据:
PUT game_of_thrones/role/1
{"group": "stark","performer": [{"first": "John", "last": "Snow"},{"first": "Sansa", "last": "Stark"}]
}
# 内部存储结构:
{"group": 	         "stark","performer.first": [ "john", "sansa" ],"performer.last":  [ "snow", "stark" ]
}
# 存储分析:
可以看出, user.first和user.last会被平铺为多值字段, 这样一来, John和Snow之间的关联性就丢失了.
在查询时, 可能出现John Stark的结果.

用nested类型解决object类型的不足
如果需要对以最对象进行索引, 且保留数组中每个对象的独立性, 就应该使用嵌套数据类型.
—— 嵌套对象实质是将每个对象分离出来, 作为隐藏文档进行索引.

# 创建映射
PUT game_of_thrones
{"mappings": {"role": {"properties": {"performer": {"type": "nested" }}}}
}# 添加数据
PUT game_of_thrones/role/1
{"group" : "stark","performer" : [{"first": "John", "last": "Snow"},{"first": "Sansa", "last": "Stark"}]
}# 检索数据
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": {}}}}}}
}

参考资料

  1. https://www.cnblogs.com/shoufeng/p/10692113.html es数据类型讲的很详细;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(六)ElasticSearch 6.1.1聚合查询

1 普通类型 1.1 基本操作 1.1.1 导入实战数据 数据字段如下: 字段类型作用pricelong汽车售价colortext汽车颜色maketext汽车品牌solddate销售日期 # 创建索引 PUT /cars {"mappings" : {"transactions" : {"properties" : {"…

12 Essential Bootstrap Tools for Web Designers

12 Essential Bootstrap Tools for Web Designers Posted by vikas on June 6, 2014, filed in: Tools, Web Design 原文地址:http://designzum.com/2014/06/06/12-best-bootstrap-tools-for-web-designers/Bootstrap is a great front end website development pla…

关于目录操作walk

对于多级目录的文件处理,walk是神器,一个模板如下: root 所指的是当前正在遍历的这个文件夹的本身的地址dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)files 同样是 list , 内容是该文件夹中所有的文件(不包…

注册COM组件cmd(管理员权限)

比如,注册这个很老版本的office组件 C:\Windows\system32>regsvr32 d:\dsoframer.ocx转载于:https://www.cnblogs.com/3Tai/p/3779696.html

文本处理常用方法

匹配模式字符串不要有任何空格和变量,重要!重要!重要! re 准备正则表达式 在正则表达式中,如果直接给出字符,就是精确匹配。 \d 可以匹配一个数字 \W 匹配非字母数字及下划线 \w 可以匹配一个字母或数字…

Entity Framework中IQueryable, IEnumerable, IList的区别

博客园里有这样的总结。这里姑且先列个题目, 提醒自己记忆。转载于:https://www.cnblogs.com/buguge/p/3779817.html

Java中重载和复写的区别

Java中重载和复写的区别重载(overload)复写(override)区别和联系重载(overload) 函数重载的最突出的例子就是类的构造函数,用户定义一个对象时可能会提供多种参数组合;函数重载的第…

Sublime Text3自定义快捷键

转载于:https://www.cnblogs.com/shimily/articles/3783711.html

打jar包和执行jar包

使用eclipse打jar包 默认生成的目录在/Work/Projects/eclipse-workspace 执行 java -cp hellotest.jar com.feiyangedu.sample.Main java -cp testtesttest.jar com.feiyangedu.sample.Person out:print person java -cp testtesttest.jar com.feiyangedu.sample.…

受限波尔兹曼机

1. 概述 前面描述的神经网络模型是一种确定的结构。而波尔兹曼网络是一种随机网络。如何来描述一个随机网络呢?很多书上有大量的篇幅介绍其原理。这里把它总结为以下两点。 第一,概率分布函数。由于网络节点的取值状态是随机的,从贝叶斯网的…

字符编码理解

计算的本质是二进制的运算,所以要想把现实生活中的文字、图片、语音等信号媒介用计算机来处理,必须把这些东西切分成基本元素,然后把每一个元素一一映射为数字,这是最基本的做法。 英语切分成最基本的元素就是26个字母大小写加上…

jQuery css详解

今天确确实实是放了一天假,喝了点小酒,看了天天向上和快乐大本营以及中国好舞蹈,越来越热爱舞蹈了,还是总结一篇吧。 jquery css css(name|pro|[,val|fn):访问或设置匹配元素的样式属性 1 $("div").click(fu…

1001 害死人不偿命的(3n+1)猜想 (15分)

1001 害死人不偿命的(3n1)猜想 (15分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n1。卡拉…

java中的动态绑定与静态绑定

首先是方法的参数是父类对象,传入子类对象是否可行 然后引出Parent p new Children(); 这句代码不是很理解,google的过程中引出向上转型 要理解向上转型又引出了动态绑定 从动态绑定又引出了静态绑定 程序绑定的概念: 绑定指的是一个方法的…

1002 写出这个数 (20分)

1002 写出这个数 (20分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10 ​100 ​​ 。 输出格式: 在一…

ATL和ActiveX做的控件.dll和.ocx最主要的区别(摘录)

楼主是不是说用ATL做的控件和用MFC ActiveX wizard的控件有什么区别吧依存的动态库不一样, 一个是ATL.DLL吧, 一个是MFC42.DLL。 ATL开发的控件代码少,轻便,便于网上发布;MFC开发的控件笨重,但是MFC类库丰富…

1003 我要通过! (20分)

1003 我要通过! (20分) “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。 得到“答案正确”的条件是:…