API允许你向索引(index)添加文档类型(type),或者向文档类型(type)中添加字段(field)。
PUT secisland { "mappings": { "log": { "properties": { "message": { "type": "string" } } } } }
添加索引名为secisland,文档类型为log,其中包含字段message,字段类型是字符串。
PUT secisland/_mapping/user
{ "properties": { "name": { "type": "string" } } }
向已经存在的索引secisland添加文档类型为user,包含字段name,字段类型是字符串。
PUT secisland/_mapping/log
{ "properties": { "user_name": { "type": "string" } } }
已经存在的索引secisland,文档类型为log,添加新的字段user_name,字段类型是字符串。
多个索引设置映射,可以一次向多个索引添加文档类型
PUT /{index}/_mapping/{type} { body }
{index}可以有多种方式,逗号分隔,比如test1,test2,test3
_all,表示所有索引,通配符,*表示所有,test*表示以test开头
{type}需要添加或更新的文档类型
{body}需要添加的字段或字段类型
在一般情况下,对现有字段的映射不会更新。对这个规则有一些例外。例如:
新的属性被添加到对象数据类型的字段。
新的多域字段被添加到现有的字段。
doc_values可以被禁用。
增加了ignore_above参数。
例如:
请求:PUT my_index
参数:
{ "mappings": { "user": { "properties": { "name": { "properties": { "first": { "type": "string" } } }, "user_id": { "type": "string", "index": "not_analyzed" } } } } }
user的第一个name属性是对象数据类型(Object datatype)字段,对上个索引进行修改:
请求:PUT my_index/_mapping/user
参数:
{ "properties": { "name": { "properties": { "last": { "type": "string" } } }, "user_id": { "type": "string", "index": "not_analyzed", "ignore_above": 100 } } }
修改映射,对第一个对象数据类型增加了一个熟悉是last。修改了user_id, 通过设置ignore_above使默认的更新为0。
在同一个索引的不同类型(type)中,相同名称的字段中必须有相同的映射,因为他们内部是在同一个领域内,如果试图在这种情况下更新映射参数,系统将会抛出异常。除非在更新的时候指定 update_all_types参数。在这种情况下它将更新在相同的指标参数在所有同名的字段。
例如:
请求:PUT my_index
参数:
{ "mappings": { "type_one": { "properties": { "text": { "type": "string", "analyzer": "standard" } } }, "type_two": { "properties": { "text": { "type": "string", "analyzer": "standard" } } } } }
修改映射
请求:PUT my_index/_mapping/type_one
参数:
{ "properties": { "text": { "type": "string", "analyzer": "standard", "search_analyzer": "whitespace" } } }
这个时候会抛出异常,然后增加参数,update_all_types,这个时候会同时更新两个类型。
请求:PUT my_index/_mapping/type_one?update_all_types
{ "properties": { "text": { "type": "string", "analyzer": "standard", "search_analyzer": "whitespace" } } }
获取文档映射接口允许通过索引或者索引和类型来检索。
curl -XGET 'http://localhost:9200/twitter/_mapping/tweet'
系统同时支持获取多个索引和类型的语法:
获取文档映射接口一次可以获取多个索引或文档映射类型。该接口通常是如下格式:
host:port/{index}/_mapping/{type},{index}和{type}可以接受逗号(,)分隔符,也可以使用_all来表示全部索引。如下所示:
curl -XGET 'http://localhost:9200/_mapping/twitter,kimchy'
curl -XGET 'http://localhost:9200/_all/_mapping/tweet,book'
第一个省略_all,第二个使用_all都是表示全部索引。也就是说,下面两个是等价的:
curl -XGET 'http://localhost:9200/_all/_mapping'
curl -XGET 'http://localhost:9200/_mapping'
获取文档字段接口允许你检索一个或多个字段。这个用来检索想要检索的字段,而不是某个索引或者文档类型的全部内容。
这段请求只返回字段为text的内容:
curl -XGET 'http://localhost:9200/twitter/_mapping/tweet/field/text'
响应结果如下(假定text为String类型)
{ "twitter": { "tweet": { "text": { "full_name": "text", "mapping": { "text": { "type": "string" } } } } } }
获取多索引和类型的字段映射。
获取文档字段映射接口一次可以获取多个索引或文档映射类型。该接口通常是如下格式:host:port/{index}/{type}/_mapping/field/{field}
{index},{type},{field}可以使用逗号(,)分隔,也可以使用*作为通配符{type},{field}可以使用逗号(,)分隔。
其中{index}可以使用_all表示全部索引,示例如下:
curl -XGET 'http://localhost:9200/twitter,kimchy/_mapping/field/message'
curl -XGET 'http://localhost:9200/_all/_mapping/tweet,book/field/message,user.id'
curl -XGET 'http://localhost:9200/_all/_mapping/tw*/field/*.id'
指定字段
获取文档字段接口,可以使用逗号(,)分隔符或者通配符(*)。
如下文档示例,如果只使用字段名id会产生歧义。
{ "article": { "properties": { "id": { "type": "string" }, "title": { "type": "string"}, "abstract": { "type": "string"}, "author": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } } } } } }
如果想要表示author中的id,name,使用author.id,author.name。请求如下:
curl -XGET "http://localhost:9200/publications/_mapping/article/field/
author.id,abstract,author.name"
返回结果如下:
{ "publications": { "article": { "abstract": { "full_name": "abstract", "mapping": { "abstract": { "type": "string" } } }, "author.id": { "full_name": "author.id", "mapping": { "id": { "type": "string" } } }, "author.name": { "full_name": "author.name", "mapping": { "name": { "type": "string" } } } } } }
检查索引或文档类型是否存在
curl -XHEAD -i 'http://localhost:9200/twitter/tweet'
存在返回200,不存在返回404。
赛克蓝德(secisland)后续会逐步对Elasticsearch的最新版本的各项功能进行分析,近请期待。也欢迎加入secisland公众号进行关注。