2.3 通过映像Mapping配置索引
类似于在关系型数据库管理系统中建立数据表时要定义其字段名及其数据类型那样,映像Mapping是对Elasticsearch中索引字段名及其数据类型的定义。但映像要比关系型数据库管理系统中的结构定义灵活得多。其实,在使用Elasticsearch时,不指定映像也是可以的,因为Elasticsearch会自动根据数据格式定义它的类型。但如果需要对某些字段添加特殊属性(如该字段是否分词,是否存储,使用什么样的分词器等),就必须添加和设置映像。
为索引文件添加映像有两种方式:一种是定义在配置文件中;另一种是在运行时手动提交映像。
2.3.1 在索引中使用映像
下面的代码段2.5就是手动提交映像的例子。代码运行后,会创建名为weibo的索引文件(Index),其内部会包含一个名为wb的类型(Type),这个Type中有一个名为user的字段,其数据类型为string,且设置不对该字段内容进行分词。请注意在代码段2.5中,也同时指定了索引文件的shards数和replicas数。
//代码段2.5: 通过映像设置Index中某个Type下的Field中的细节信息
curl -XPOST localhost:9200/weibo -d '{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"wb": {
"properties": {
"user": { "type": "string",
"index": "not_analyzed"
}
}
}
}
}'
2.3.2 管理/配置映像
一般地,可以使用类似下面的方法完成管理/配置映像文件。
PUT /{index}/_mapping/{type}
其中,PUT代表HTTP 方法;{index}表示对应的索引文件名称;{type}表示类型文件名称。针对{index}和{type},可以使用下面的语法进行扩充:
对{index}部分的扩展: blank |*| _all | glob pattern | name1, name2, ... 对{type}部分的扩展: 需要配置Mapping的type名称
下面的代码段2.6展示了如何管理/配置索引文件的映像。此例中,在名为weibo的索引文件中,针对其中的某个类型文件(此例为wb),对名为mymessage的字段进行了设置。这里定义memessage的数据类型为字符串,且它需要在Elasticsearch中存储。
//代码段2.6: 通过映像配置Type文件中的细节属性
curl -XPUT 'http://localhost:9200/weibo/wb/_mapping' -d '{
"wb": {
"properties": {
"mymessage": {"type": "string",
"store": true
}
}
}
}'
2.3.3 获取映像信息
可通过GET方法来获取映像中的信息,相关命令为:
GET /{index}/_mapping/{type}
下面的代码给出了面对具体类型文件的获取信息的方法。
curl -XGET 'http://localhost:9200/weibo/_mapping/wb'
和前述情况类似,在{index}中写入索引文件名称(如果有多个索引文件,可以使用逗号隔开,也可以使用_all参数来匹配所有索引);在{type}中写入具体的类型文件名称(如果有多个也可以使用逗号来分隔它们)。例如,如果获取所有索引文件的所有类型文件的映像信息,可使用下面的方法:
curl -XGET 'http://localhost:9200/_all/_mapping' curl -XGET 'http://localhost:9200/_mapping'
如果指定了具有的类型,则可用类似下面的语句来获取相应类型中的信息(可以获取两个类型文件——即wb和pages——中的信息)。
curl -XGET 'http://localhost:9200/_all/_mapping/wb, pages'
代码段2.7演示了如何查看索引文件名为weibo、类型文件为wb、字段为user的映像配置信息的方法。
//代码段2.7: 查看指定field的mapping的方法
curl -XGET 'http://localhost:9200/weibo/_mapping/wb/field/user'
针对上述语句的返回值如下:
{"weibo": { "mappings": { "wb": { "user": { "full_name": "user", "mapping": {"user": {"type":"string", "index": "not_ analyzed"}} } } } } }
代码段2.8演示了如何查看跨索引(即多Index)的field的方法,以及在所有索引中针对某些指定类型中的指定字段内容的方法,注意在第3行代码中的通配符的用法。
//代码段2.8: 在多个Index或多个Type中查询Mapping的方法
curl -XGET 'http://localhost:9200/weibo, weibo2/_mapping/field/time'
curl -XGET 'http://localhost:9200/_all/_mapping/wb,pages/field/time,meaasge'
curl -XGET 'http://localhost:9200/_all/_mapping/wei*/field/*.ID'
2.3.4 删除映像
映像也可以通过DELETE方法删除。同样,这里也允许使用通配符和_all等参数。注意在下面给出的方法中,方括号里面代表需要使用的HTTP方法(这里是DELETE方法)。
[DELETE] /{index}/{type} [DELETE] /{index}/{type}/_mapping [DELETE] /{index}/_mapping/{type}
在上述语句后面的{index}参数和{type}参数列表中可使用的参数如下,如果存在多个名称,用逗号分隔开它们即可。
{index}部分: * | _all | glob pattern | name1, name2, ... {type}部分: * | _all | glob pattern | name1, name2, ...