映射介绍
映射是定义存储和索引的文档及其包含的字段的过程。 例如,使用映射来定义:
- 应将哪些字符串字段视为全文字段。
- 哪些字段包含数字,日期或地理位置。
- 日期值的格式。
- 用于控制动态添加字段的映射的自定义规则。
(1)映射配置
我们已经知道在创建索引时,可以添加settings相关参数
PUT blog
{
"settings" : {
"number_of_shards" : 2,
"number_of_replicas" : 2
}
}
在创建索引时,还可以进行映射配置,可以在映射中实现定义文档的字段类型、分词器等属性。
PUT book
{
"settings" : {
"number_of_shards" : 2,
"number_of_replicas" : 2
},
"mappings": {
"_doc": {
"properties": {
"title": { "type": "text" },
"price": { "type": "integer" }
}
}
}
}
其中,mappings表示映射配置,_doc是唯一的type名(也是官方推荐的名字),properties表示文档包含的属性字段(第1个字段是text类型的title标题,第2个字段是integer类型的price价格)。响应结果如下:
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "book"
}
查看索引
GET book
{
"book" : {
"aliases" : { },
"mappings" : {
"_doc" : {
"properties" : {
"price" : {
"type" : "integer"
},
"title" : {
"type" : "text"
}
}
}
},
"settings" : {
"index" : {
"creation_date" : "1547105358927",
"number_of_shards" : "2",
"number_of_replicas" : "2",
"uuid" : "4j_jq8S_TG2tX27UoSCrGQ",
"version" : {
"created" : "7000099"
},
"provided_name" : "book"
}
}
}
}
(2)删除type
从Elasticsearch 5.6开始,逐步删除type。 在Elasticsearch 7.x版本中提供了include_type_name=false
参数,为升级8.0做好准备。索引创建,映射和文档API支持include_type_name选项。 设置为false时,此选项将启用在删除类型时将成为8.0中的默认行为。
DELETE book
PUT book?include_type_name=false
{
"mappings": {
"properties": {
"title": { "type": "text" },
"price": { "type": "integer" }
}
}
}
GET book/_mappings?include_type_name=false
{
"book" : {
"mappings" : {
"properties" : {
"price" : {
"type" : "integer"
},
"title" : {
"type" : "text"
}
}
}
}
}
在Elasticsearch 7.0版本中,依然需要使用{index}/_doc
形式添加文档自动生成id,以{index}/_doc/{id}
形式显式指定id添加文档;
PUT book/_doc/1
{
"title":"Java面向对象程序设计",
"price":40
}
12345
GET book/_doc/1
1
{
"_index" : "book",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"title" : "Java面向对象程序设计",
"price" : 40
}
}
在Elasticsearch 7.0版本中,GET、DELETE、_update和_search等API请求将继续返回一个_type键,但它被认为已弃用,将在Elasticsearch 8.0中删除。
字段类型
Elasticsearch支持文档中字段的许多不同数据类型。
- 核心类型
- 字符串类型:text,keyword
- 数字类型:ong, integer, short, byte, double, float, half_float, scaled_float
- 日期类型:date
- 布尔类型:boolean
- 二进制类型:binary
- 范围类型:integer_range, float_range, long_range, double_range, date_range
- 复合类型
- 数组类型:array
- 对象类型:object
- 嵌套类型:nested
- 地理类型
- 地理坐标类型:geo_point
- 地理图形类型:geo_shape
- 专门类型
- IP类型:ip
- 完成类型:completion
- 令牌计数器类型:token_count
网友评论