mapping 详解2(field datatypes)
基本类型
1. 字符串
字符串类型被分为两种情况:full-text 和 keywords。
full-text 表示字段内容会被分析,而 keywords 表示字段值只能作为一个精确值查询。
参数:
analyzer、boost、doc_values、fielddata、fields、ignore_above、include_in_all、index、index_options、norms、null_value、position_increment_gap、store、search_analyzer、search_quote_analyzer、similarity、term_vector
2. 数值
数值类型包括: long, integer, short, byte, double, float 。
参数:
coerce、boost、doc_values、ignore_malformed、include_in_all、index、null_value、precision_step、store
3. 日期
JSON 本身并没有日期数据类型,在 ES 中的日期类型可以是:
- 类似
"2015-01-01"or"2015/01/01 12:10:30" 的字符串 long 类型的毫秒级别的时间戳int 类型的秒级别的时间戳
日期类型默认会被转换为 UTC 并且转换为毫秒级别的时间戳的 long 类型存储。
日期类型如果不指定 format ,将会以默认格式表示。
参数:
boost、doc_values、format、ignore_malformed、include_in_all、index、null_value、precision_step、store
4. 布尔
布尔假: false, "false", "off", "no", "0", "" (empty string), 0, 0.0 。
布尔真: 任何不为假的值。
像 terms aggregation 聚合,是使用 1 和 0 来作为 key 的,key_as_string 则是用字符串 true 和 false
布尔类型的值,在 scripts 中则始终返回 1 或 0
参数:
boost、doc_values、index、null_value、store
5. 二进制
二进制类型以 Base64 编码方式接收一个二进制值,二进制类型字段默认不存储,也不可搜索。
参数:doc_values、store
复杂类型
1. 对象
JSON 格式本身是分层级的——文档可以包含对象,对象还可以包含子对象。不过,在 ES 内部 "对象" 被索引为一个扁平的键值对。
例如:
PUT my_index/my_type/
{
"region": "US",
"manager": {
"age": ,
"name": {
"first": "John",
"last": "Smith"
}
}
}
转换为:
{
"region": "US",
"manager.age": ,
"manager.name.first": "John",
"manager.name.last": "Smith" //层级结构被以 "." 来表示。
}
2. 数组
数组类型,要求数组元素的数据类型必须一致。
- 字符串数组: [
"one","two"] - 数字数组: [
1,2] - 数组数组: [
1, [2,3]] which is the equivalent of [1,2,3] - 对象数组: [
{ "name": "Mary", "age": 12 },{ "name": "John", "age": 10 }]
数组元素的数据类型,将会由其第一个元素的数据类型决定。
对象数组,在 ES 内部将会被转换为 "多值" 的扁平数据类型。后面将会详解这一点。
例如:
PUT my_index/my_type/
{
"group" : "fans",
"user" : [
{
"first" : "John",
"last" : "Smith"
},
{
"first" : "Alice",
"last" : "White"
}
]
}
转转为:
{
"group" : "fans",
"user.first" : [ "alice", "john" ],
"user.last" : [ "smith", "white" ]
}
3. 对象数组
对象数组在 ES 内部,会把所有数组元素(即对象)合并,对象中的每一个字段被索引为一个 "多值" 字段。这将导致每个数组元素(对象)内部的字段关联性丢失,解决的方法是使用 nested 类型。
例如:
PUT my_index/my_type/
{
"region": "US",
"manager": {
"age": ,
"name": [
{
"first": "John",
"last": "Smith"
},
{
"first": "Bob",
"last": "Leo"
}
]
}
}
转换为:
{
"region": "US",
"manager.age": ,
"manager.name.first": "John Bob",
"manager.name.last": "Smith Leo"
}
// 如果我们搜索:
"bool": {
"must": [
{ "match": { "manager.name.first": "John" }}, // John Smith
{ "match": { "manager.name.last": "Leo"}} // Bob Leo
]
}
//这将会导致导致文档被命中,显然,John Smith 、Bob Leo 两组字段它们内在的关联性都丢失了
参数:
dynamic、enabled、include_in_all、properties
4. 嵌套(nested)
嵌套类型是一个特殊对象类型,嵌套类型允许对对象数组的每一个元素(对象)相互独立的进行查询,也即他们不会被合并为一个对象。
嵌套类型的文档可以:
- 用
nested查询来查询 - 用
nested来分析以及reverse_nested来聚合 - 用 nested sorting 来排序
- 用 nested inner hits 来检索或高亮
例如:
PUT my_index/my_type/
{
"region": "US",
"manager": {
"age": ,
"name": [
{
"first": "John",
"last": "Smith"
},
{
"first": "Bob",
"last": "Leo"
}
]
}
}
转换为:
{
"region": "US",
"manager.age": ,
{
"manager.name.first": "John",
"manager.name.last": "Smith"
},
{
"manager.name.first": "Bob",
"manager.name.last": "Leo"
}
}
// 如果我们搜索:
"bool": {
"must": [
{ "match": { "manager.name.first": "John" }}, // John Smith
{ "match": { "manager.name.last": "Leo"}} // Bob Leo
]
}
//这样的查询将不能命中文档!!!
参数:
dynamic、include_in_all、properties
专有类型
1. IPV4类型
IPV4 数据类型其实质是个 long 类型,不过其能接收一个 IPV4 地址并且将他转换为 long 类型存放。
参数:
boost、doc_values、include_in_all、index、null_value、precision_step、store
mapping 详解2(field datatypes)的更多相关文章
- mapping 详解1(mapping type)
映射(mapping) 映射是定义一个文档以及其所包含的字段如何被存储和索引的方法. 例如,用映射来定义以下内容: 哪些 string 类型的 field 应当被当成当成 full-text 字段 哪 ...
- mapping 详解5(dynamic mapping)
概述 在使用 ES 的时,我们不需要事先定义好映射设置就可以直接向索引中导入文档.ES 可以自动实现每个字段的类型检测,并进行 mapping 设置,这个过程就叫动态映射(dynamic mappin ...
- mapping 详解3(Meta-Fields)
文档标识相关元数据字段 _index 当执行多索引查询时,可能需要添加特定的一些与文档有关联的索引的子句. _index 字段可以用在 term.terms 查询,聚合(aggregations)操作 ...
- mapping 详解4(mapping setting)
mapping type 映射设置一般发生在: 1. 增加新的 index 的时候,添加 mapping type,对 fields 的映射进行设置 PUT twitter { "mappi ...
- Elasticsearch5.X Mapping详解
0.引言 在关系型数据库如Mysql中,设计库表需要注意的是: 1)需要几个表: 2)每个表有哪些字段: 3)表的主键及外键的设定——便于有效关联. 表的设计遵守范式约束,考虑表的可扩展性,避免开发后 ...
- django中models field详解
本文参考自:django官方文档models/field 在model中添加字段的格式一般为: field_name = field_type(**field_options) 一 field o ...
- elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)
一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...
- elasticsearch最全详细使用教程:入门、索引管理、映射详解、索引别名、分词器、文档管理、路由、搜索详解
一.快速入门1. 查看集群的健康状况http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 状 ...
- ELK查询命令详解
目录 ELK查询命令详解 倒排索引 使用ElasticSearch API 实现CRUD 批量获取文档 使用Bulk API 实现批量操作 版本控制 什么是Mapping? 基本查询(Query查询) ...
随机推荐
- 《零成本实现Web自动化测试--基于Selenium》 第五章 Selenium-RC
一. 简介 Selenium-RC可以适应更复杂的自动化测试需求,而不仅仅是简单的浏览器操作和线性执行.Selenium-RC能够充分利用编程语言来构建更复杂的自动化测试案例,例如读写文件.查询数据库 ...
- 关于Excel中的需求或者是用例导入到QC中遇到的问题
Excel 中导入用例到QC时,会提示如图所示的错误信息: 解决方案: 我的电脑-->属性->高级-->性能设置-->添加QC程序
- Java面试题:n=2\n1*2*5*6\n--3*4\n\nn=3\n1*2*3*10*11*12\n--4*5*8*9\n----6*7\n如何实现如上结构的数据
今天学长在面试的时候遇到了一道题,然后让大家做一做. 在不看下面的答案之前,悠闲的朋友们一起来抖动一下大脑吧! 以下是我的想法: import java.util.Scanner;public cla ...
- LeetCode题解——Longest Palindromic Substring
题目: 给定一个字符串S,返回S中最长的回文子串.S最长为1000,且最长回文子串是唯一. 解法: ①遍历,对于每个字符,计算以它为中心的回文子串长度(长度为奇数),同时计算以它和右边相邻字符为中心的 ...
- NOIP2005 篝火晚会
篝火晚会 (fire.pas/c/cpp) [问题描述] 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了“小教官”.在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会. ...
- ubuntukylin提取root权限及mongoDB部署
UbuntuKylin下安装Mongodb (参照UbuntuKylin下安装Mongodb一文安装成功后的心得) 1.官网下载安装包 http://www.mongodb.org/dr/fastd ...
- Java自定义Annotation,通过反射解析Annotation
创建一个自定义的Annotation import java.lang.annotation.*; import java.lang.reflect.Method; @Documented @Targ ...
- ios 对象的集合类(collection classes)
当你着手为你的应用编写代码的时候,你会发现有许多可供使用的Objective-C的框架类,其中尤其重要的就是基础框架类,它为平台所有的应用提供基础服务.基础框架类中包括了表示字符串和数字等基本数据类型 ...
- msp430的两本书 电子版【worldsing笔记】
msp430的两本书,pdf版 MSP430系列单片机接口_技术及系统设计实例 MSP430系列16位超低功耗单片机原理与应用 点击此处下载 ourdev_528863.pdf(文件大小:4.21M) ...
- ACM_基础知识
1. PI值的定义 const double PI = acos(-1.0); 2. system("pause")就是调用从程序中调用系统命令,而"pause" ...