基本类型

1. 字符串

字符串类型被分为两种情况:full-text 和 keywords。

full-text 表示字段内容会被分析,而 keywords 表示字段值只能作为一个精确值查询。

参数:

analyzerboostdoc_valuesfielddatafieldsignore_aboveinclude_in_allindexindex_optionsnormsnull_valueposition_increment_gapstoresearch_analyzersearch_quote_analyzersimilarityterm_vector

2. 数值

数值类型包括: long, integer, short, byte, double, float 。

参数:

coerceboostdoc_valuesignore_malformedinclude_in_allindexnull_valueprecision_stepstore

3. 日期

JSON 本身并没有日期数据类型,在 ES 中的日期类型可以是:

  • 类似 "2015-01-01" or "2015/01/01 12:10:30" 的字符串
  • long 类型的毫秒级别的时间戳
  • int 类型的秒级别的时间戳

日期类型默认会被转换为 UTC 并且转换为毫秒级别的时间戳的 long 类型存储。

日期类型如果不指定 format ,将会以默认格式表示。

参数:

boostdoc_valuesformatignore_malformedinclude_in_allindexnull_valueprecision_stepstore

4. 布尔

布尔假:    false, "false", "off", "no", "0", "" (empty string), 0, 0.0 。

布尔真:    任何不为假的值。

像 terms aggregation 聚合,是使用 1 和 0 来作为 key 的,key_as_string 则是用字符串 true 和 false

布尔类型的值,在 scripts 中则始终返回 1 或 0

参数:

boostdoc_valuesindexnull_valuestore

5. 二进制

二进制类型以 Base64 编码方式接收一个二进制值,二进制类型字段默认不存储,也不可搜索。

参数:doc_valuesstore

复杂类型

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 两组字段它们内在的关联性都丢失了

参数:

dynamicenabledinclude_in_allproperties

4. 嵌套(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",
"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
]
}
//这样的查询将不能命中文档!!!

参数:

dynamicinclude_in_allproperties

专有类型

1. IPV4类型

IPV4 数据类型其实质是个 long 类型,不过其能接收一个 IPV4 地址并且将他转换为 long 类型存放。

参数:

boostdoc_valuesinclude_in_allindexnull_valueprecision_stepstore

mapping 详解2(field datatypes)的更多相关文章

  1. mapping 详解1(mapping type)

    映射(mapping) 映射是定义一个文档以及其所包含的字段如何被存储和索引的方法. 例如,用映射来定义以下内容: 哪些 string 类型的 field 应当被当成当成 full-text 字段 哪 ...

  2. mapping 详解5(dynamic mapping)

    概述 在使用 ES 的时,我们不需要事先定义好映射设置就可以直接向索引中导入文档.ES 可以自动实现每个字段的类型检测,并进行 mapping 设置,这个过程就叫动态映射(dynamic mappin ...

  3. mapping 详解3(Meta-Fields)

    文档标识相关元数据字段 _index 当执行多索引查询时,可能需要添加特定的一些与文档有关联的索引的子句. _index 字段可以用在 term.terms 查询,聚合(aggregations)操作 ...

  4. mapping 详解4(mapping setting)

    mapping type 映射设置一般发生在: 1. 增加新的 index 的时候,添加 mapping type,对 fields 的映射进行设置 PUT twitter { "mappi ...

  5. Elasticsearch5.X Mapping详解

    0.引言 在关系型数据库如Mysql中,设计库表需要注意的是: 1)需要几个表: 2)每个表有哪些字段: 3)表的主键及外键的设定——便于有效关联. 表的设计遵守范式约束,考虑表的可扩展性,避免开发后 ...

  6. django中models field详解

    本文参考自:django官方文档models/field 在model中添加字段的格式一般为:  field_name = field_type(**field_options) 一  field o ...

  7. elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)

    一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...

  8. elasticsearch最全详细使用教程:入门、索引管理、映射详解、索引别名、分词器、文档管理、路由、搜索详解

    一.快速入门1. 查看集群的健康状况http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 状 ...

  9. ELK查询命令详解

    目录 ELK查询命令详解 倒排索引 使用ElasticSearch API 实现CRUD 批量获取文档 使用Bulk API 实现批量操作 版本控制 什么是Mapping? 基本查询(Query查询) ...

随机推荐

  1. POJ 2481-Cows(BIT)

    题意: n个牛,每个牛对应一个区间,对于每个牛求n个区间有几个包含该牛的区间. 分析: 先 区间右边界从大到小排序,相同时左边界小到大,统计第i头牛即左边界在前i-1头左边界的正序数. #includ ...

  2. Codeforces 611C New Year and Domino DP+容斥

    "#"代表不能放骨牌的地方,"."是可以放 500*500的矩阵,q次询问 开两个dp数组,a,b,a统计横着放的方案数,b表示竖着放,然后询问时O(1)的,容 ...

  3. NIOP1995 石子合并(区间DP)

    状态转移方程在代码中标出 本题注意是圆形,所以之前要预先处理一下s数组.处理之后总长度为2*n-1.第一个合并的起点有n个,所以总的方案数是n 注释在代码中标出 http://www.rqnoj.cn ...

  4. codeforce 606A - Magic Spheres

    题意:a,b,c三种球,能把俩个一样的球变成另一颜色不一样的球.给你目标x,y,z,问能否经过变化至少达打目标. #include<iostream> #include<stdio. ...

  5. hdu4587-TWO NODES(割点)

    #include <bits/stdc++.h> using namespace std; ; ; struct Edge { int to, next; } edge[M]; int h ...

  6. android事件分发笔记

    1.SimpleOnGestureListener 遇到的问题: 自己定义一个按钮继承自Button,一开始改变按钮颜色的操作放在onTouchEvent的ATION_DOWN里触发. 这时问题来了, ...

  7. Objective-C Runtime 运行时之五:协议与分类

    Objective-C中的分类允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到. Objective-C中的协议是普遍存在的 ...

  8. Jenkins 实际项目操作

    .Abstract { padding: 15px; border: dotted 2px #999; color: #999; font-family: "Microsoft Yahei& ...

  9. #Cocos2d+lua#android+Eclipse工程编译设置

    用Elicpse编译cocos2d+lua的工程几点注意点记录: 1.设置工程属性Windows->Preferences->NDK目录 2.右键Android Tools->Add ...

  10. Flash 无法输入中文的修正方法

    在某些运行模式或运行时环境中,Flash 有一个 Bug,文本框与键盘的交互模式会无法输入中文(包括日文等带有输入法状态栏的输入模式),只要对 TextField 文本框实例的 FocusEvent. ...