1、增加映射
API允许你向索引(index)添加文档类型(type),或者想文档类型(type)中添加字段(field)。
请求:PUT http://127.0.0.1:9200/secisland
参数:{"mappings": {"log": {"properties": {"message": {"type": "string"}}}}}
以上接口添加索引名为secisland,文档类型为log,其中包含字段message,字段类型是字符串。
请求:PUT http://127.0.0.1:9200/secisland/_mapping/user
参数:{"properties": {"name": {"type": "string"}}}
向已经存在的索引secisland添加文档类型为user,包含字段name,字段类型是字符串。
请求:PUT http://127.0.0.1:9200/secisland/_mapping/log
参数:{"properties": {"user_name": {"type": "string"}}}
已经存在的索引secisland,文档类型为log,添加新的字段user_name,字段类型是字符串。
1.1、多个索引设置映射
可以一次性向多个索引添加文档类型。
请求:PUT http://127.0.0.1:9200/{index}/_mapping/{type}
参数:{body}
{index}可以有多种方式,逗号分隔,比如:test1,test2,test3。_all表示所有索引。通配符“*”表示所有。test*表示以test开头。
{type}需要添加或更新的文档类型。
{body}需要添加的字段或字段类型。
1.2、更新字段映射
在一般情况下,对现有字段的映射不会更新。对这个规则有一些例外。例如:
1) 新的属性被添加到对象数据类型的字段。
2) 新的多域字段被添加到现有的字段。
3) doc_values可以被禁用。
4) 增加了ignore_above参数。
请求:PUT http://127.0.0.1:9200/secisland
参数:{"mappings": {"user": {"properties": {"name": {"properties": {"first": {"type": "string"}}}, "user_id": {"type": "string", "index": "not_analyzed"}}}}}
user的第一个name属性是对象数据类型(Object datatype)字段,对上个索引进行修改。
请求:PUT http://127.0.0.1:9200/secisland/_mapping/user
参数:{"properties": {"name": {"properties": {"last": {"type": "string"}}}, "user_id": {"type": "string", "index": "not_analyzed", "ignore_above": 100}}}
修改映射,对第一个对象数据类型增加了一个属性是last。修改了user_id,通过设置ignore_above使默认的更新为100.
1.3、不同类型之间的冲突
在同一个索引的不同类型中,相同名称的字段中必须有相同的映射,因为它们内部是在同一个领域内,如果试图在这种情况下更新映射参数,系统将会抛出异常。除非在更新的时候指定update_all_types参数。在这种情况下它将更新所有同一索引同名称的映射参数。
请求:PUT http://127.0.0.1:9200/secisland
参数:{"mappings": {"type_one": {"properties": {"text": {"type": "string", "analyzer": "standard"}}}, "type_two": {"properties": {"text": {"type": "string", "analyzer": "standard"}}}}}
修改映射的操作如下。
请求:PUT http://127.0.0.1:9200/secisland/_mapping/type_one
参数:{"properties": {"text": {"type": "string", "analyzer": "standard", "search_analyzer": "whitespace"}}}
此时会抛出异常,然后增加参数update_all_type,同时更新两个类型。
请求:PUT http://127.0.0.1:9200/secisland/_mapping/type_one?update_all_type
参数:{"properties": {"text": {"type": "string", "analyzer": "standard", "search_analyzer": "whitespace"}}}
2、获取映射
获取文档映射接口允许通过索引或者索引和类型来搜索:
请求:GET http://127.0.0.1:9200/secisland/_mapping/secilog
系统同时支持获取多个索引和类型的语法。
获取文档映射接口一次可以获取多个索引或文档映射类型。该接口通常是如下格式:host:post/{index}/_mapping/{type},{index}和{type}可以接收逗号“,”分隔符,也可以使用_all来表示全部索引。如下所示:
请求:GET http://127.0.0.1:9200/_mapping/secisland,kimchy
请求:GET http://127.0.0.1:9200/_all/_mapping/secilog,book
第一个省略_all,第二个使用_all,两种都是表示全部索引。也就是说,下面两个是等价的:
请求:GET http://127.0.0.1:9200/_all/_mapping
请求:GET http://127.0.0.1:9200/_mapping
3、获取字段映射
获取文档字段接口允许你搜索一个或多个字段。这个用来搜索想要搜索的字段,而不是某个索引或者文档类型的全部内容。
这段请求值返回字段为text的内容:
GET http://127.0.0.1:9200/secisland/_mapping/secilog/field/text
返回值如下(假定text为string类型):
{"secisland": {"secilog": {"text": {"full_name": "text", "mapping": {"text": {"type": "string"}}}}}}
获取多索引和类型的字段映射。
获取文档字段映射接口一次可以获取多个索引或文档映射类型。该接口通常如下格式:
host:port/{index}/{type}/_mapping/field/{field}
{index},{type},{field}可以使用逗号“,”分隔,也可以使用通配符。
其中{index}可以使用_all表示全部索引,示例如下:
请求:GET http://127.0.0.1:9200/secisland,kimchy/_mapping/field/message
请求:GET http://127.0.0.1:9200/_all/_mapping/secilog,book/field/message,user.id
请求:GET http://127.0.0.1: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。
请求:GET http://127.0.0.1:9200/secisland/_mapping/article/field/author.id,abstract,author.name
返回值如下:{"secisland": {"article": {"abstract": {"full_name": "abstract", "maping": {"abstract": {"type": "string"}}}, "author.id": {"full_name": "author.id", "mapping": {"id": {"type": "string"}}}, "author.name": {"full_name": "author.name", "mapping": {"name": {"type": "string"}}}}}
4、判断类型是否存在
检查索引或文档类型是否存在:
HEAD http://127.0.0.1:9200/secisland/secilog
存在返回200,不存在返回400
网友评论