一、属性
Elasticsearch中每个索引定义时都有一个映射mappings,该映射确定如何对文档建立索引。一个映射mappings中主要包含两部分:
1、元字段:主要包括每个文档的_index、_type、_id和_source以及_all等。其中常用的属性有:
1>dynamic:是否可以动态索引数据。可以取值"true"、"false"或"strict",默认为"true"。"true"表示如果存在索引中未定义的字段数据时,自动索引该字段数据,即该字段可以被作为查询条件被查询到;"false"表示如果存在索引中未定义的字段数据时,不索引该字段数据,即该字段作为查询条件不能被查询到,但注意_source中是有该字段的;"strict"表示如果存在索引中未定义的字段数据时,入es时会直接报错;
2>_source:文档的原始结构和数据。它的enabled属性默认是true,使被检索到的文档中都会有_source字段,包含了除_id外的所有字段及内容。可以将其enabled属性设置为false使其不返回,也可以使用"includes"或"excludes"指定只包含或不包含指定的字段;
3> _all:文档的所有字段内容组成字符串的集合,字段与字段之间用空格分隔。它的enabled属性默认是false,高版本下_all已被copy_to所替代;
2、properties属性列表:其中定义了文档中的属性(可以理解为字段,又叫域)。
更多属性参考:https://www.elastic.co/guide/en/elasticsearch/reference/6.5/mapping-params.html
二、数值类型
Elasticsearch创建索引时,需要定义每个字段(域)的类型,简单类型默认都支持数组形式,不需要特意再声明是数组类型。常用类型有:
映射类型 | 说明 |
---|---|
string | 字符串,es5后被移除,被拆成keyword和text |
keyword | 精确匹配的字符串,不会做分词处理 |
text | 全文检索的字符串,分析器会做分词处理 |
byte、short、integer、long | 整型 |
float、double | 浮点数 |
boolean | 布尔型 |
date | 日期 |
integer_range、float_range、long_range、double_range、date_range | 表示对应类型的范围 |
多层级对象 | 通过properties将若干简单域组成上级域的属性 |
nested | 对象类型的数组 |
completion | 用于支持Completion Suggester |
geo_point、geo_shape | 地理位置、地理形状等 |
1>多层级对象示例:
//在mappings中定义为:
{
"properties": {
"name": {
"properties": {
"first_name": {
"type": "keyword"
},
"middle_name": {
"type": "keyword"
},
"last_name": {
"type": "text"
}
}
}
}
}
//实际存储的数据示例为:
{
"_source": {
"name": {
"last_name": "Clinton",
"middle_name": "Jefferson",
"first_name": "William"
}
}
}
2>nested示例:
//在mappings中定义为:
{
"properties": {
"scores": {
"type": "nested",
"properties": {
"chinese": {
"type": "long"
},
"math": {
"type": "long"
}
}
}
}
}
//实际存储的数据示例为:
{
"_source": {
"scores": [
{
"chinese": 100,
"math": 99
},
{
"chinese": 99,
"math": 98
},
{
"chinese": 100,
"math": 100
}
]
}
}
更多字段类型请参考:https://www.elastic.co/guide/en/elasticsearch/reference/6.5/mapping.html