美文网首页
Elasticsearch的索引映射管理

Elasticsearch的索引映射管理

作者: 代码的搬运工 | 来源:发表于2019-12-19 16:25 被阅读0次

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

相关文章

网友评论

      本文标题:Elasticsearch的索引映射管理

      本文链接:https://www.haomeiwen.com/subject/ejtpnctx.html