增加映射
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公众号进行关注。
来源:oschina
链接:https://my.oschina.net/u/247205/blog/655713