2.4 通过映像mappings配置索引
类似于在关系型数据库管理系统中建立数据表时要定义其字段名及其数据类型那样,映像mappings是对Elasticsearch中索引字段名及其数据类型的定义,但映像mappings要比关系型数据库管理系统中的数据结构定义灵活得多。其实,在使用Elasticsearch时,不指定映像mappings也是可以的,因为Elasticsearch会自动根据数据格式定义它的类型,但如果需要对某些字段添加特殊属性(如:该字段是否分词,是否存储,使用什么样的分析器等),就必须添加和设置映像。在为索引文件添加映像mappings时,一种是定义在配置文件中,另一种是在运行时手动提交映像mappings。
Tips:映像mappings默认可以为数据规定多种数据类型(type),在Elasticsearch升级到5.0之后,去掉了原有的string类型,添加了新的text和keyword类型。其中text类型适用于电子邮件正文、产品描述等需要进行全文索引的信息;而keyword适用于电子邮箱地址、主机名、网络传输状态码、国际邮政编码、标记文本等能够精确命中字段的信息。
2.4.1 在索引中使用映像
下面的代码段2.5就是手动提交映像的例子。代码运行后,会创建名为“weibo”的索引文件(index),其内部会包含一个名为wb的类型(type),这个type中有一个名为user的字段,其数据类型为text且设置为不对该字段内容进行分词。请注意在代码段2.5中也同时指定了索引文件的shards数和replicas数。
//代码段2.5:通过 mappings设置 index中某个 type下的 field中的细节信息 curl-XPOST localhost:9200/weibo/wb-d'{ "settings": { "number_of_shards":5, "number_of_replicas":1 }, "mappings": { "properties": { "user": { "type": "text", "index": "not_analyzed" } } } }'
2.4.2 管理/配置映像
一般地,可以使用类似下面的方法完成管理/配置映像文件,其中PUT代表HTTP方法,{index}表示对应的索引文件名称,{type}表示类型文件名称。
PUT/{index}/_mapping/{type}
针对{index}和{type},可以使用下面的语法进行扩充。对{index}部分的扩展:
blank|* |_all|glob pattern|name1, name2, …
对{type}部分的扩展,需要配置mapping的type名称。
下面的代码段2.6展示了如何管理/配置索引文件的映像。此例中,在名为weibo的索引文件中,针对其中的某个类型文件(此例为wb),对名为message的字段进行了设置,这里定义message的数据类型为text且它需要在Elasticsearch中存储。
//代码段2.6:通过 mapping配置 type文件中的细节属性 curl-XPUT'http://localhost:9200/weibo/wb/_mapping'-d'{ "wb": { "properties": { "message": { "type": "text", "store": true } } } }'
2.4.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的映像配置mapping的方法。
//代码段2.7:查看指定 mapping的方法 curl-XGET'http://localhost:9200/weibo/_mapping/wb/field/user'
针对上述语句的返回值示例如下:
{ "weibo":{ "mappings":{ "wb":{ "user":{ "full_name":"user", "mapping":{ "user":{ "type":"text", "fields":{ "keyword":{ "type":"keyword", "ignore_above":256 } } } } } } } } }
代码段2.8演示了如何查看跨索引(即多index)中field的方法,以及在所有索引中针对某些指定类型中的指定字段内容的方法(注意其中通配符的用法)。
//代码段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.4.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, …