赞
踩
ElasticSearch中的映射(Mapping)用来定义一个文档,可以定义所包含的字段以及字段的类型、分词器及属性等等。
类似于数据库中的表结构定义,主要作用如下:
Elasticsearch 支持
如下简单域类型:
keyword:
用于全文索引,该类型的字段将通过分词器进行分词,最终用于构建索引text:
不分词,只能搜索该字段的完整的值,只用于 filteringbyte
, short
, integer
, long
float
, double
boolean
date
映射可以分为动态映射和静态映射。
在关系数据库中,需要事先创建数据库,然后在该数据库实例下创建数据表,然后才能在该数据表中插入数据。而ElasticSearch中不需要事先定义映射(Mapping),文档写入ElasticSearch时,会根据文档字段自动识别类型,这种机制称之为动态映射。
JSON数据 | 自动推测的类型 |
---|---|
null | 没有字段被添加 |
true或false | boolean型 |
小数 | float型 |
数字 | long型 |
日期 | date或text |
字符串 | text |
数组 | 由数组第一个非空值决定 |
JSON对象 | object类型 |
当然,在ElasticSearch中也可以事先定义好映射,包含文档的各个字段及其类型等,这种方式称之为静态映射。
相对于动态映射,静态映射可以添加更加详细字段类型、更精准的配置信息等
index
属性控制:
Elasticsearch 6.x Mapping设置_小旋锋的博客-CSDN博客
elasticsearch篇之mapping_lyzkks的博客-CSDN博客_elasticsearch mapping
总结来说, mapping的作用就是执行一系列的指令将输入的数据转成可搜索的索引项。
- //创建mapping
- curl -u $user:$password -H "Content-Type:application/json" -XPUT "http://$ip:$port/$index/_mapping/_doc?pretty" -d '{
- "properties":{
- "properties":{
- "id":{
- "type":"long"
- },
- "task_type":{
- "type":"keyword"
- },
- "task_info":{
- "type":"text",
- "analyzer":"ik_max_word"
- },
- "t_score":{
- "type":"double"
- },
- "create_time":{
- "type":"date",
- "format":"yyyy-MM-dd HH:mm:ss"
- },
- "tag":{
- "type":"text",
- "analyzer":"comma"
- },
- "department_tag":{
- "type":"integer"
- }
- }
- }
- }'
-
-
- //查看mapping
- curl -u $user:$password -H "Content-Type:application/json" -XGET "http://$ip:$port/$index/_mapping?pretty"
ES猜测description字段是string类型,于是默认创建一个string类型的mapping。默认的analyzer有三个filter:token filter, lowercase filter和stop token filter。
- curl -X GET "http://$ip:port/$index/_analyze?analyzer=standard&pretty=true" -d "A Pretty cool guy."
-
- {
- "tokens" : [{
- "token" : "pretty",
- "start_offset" : 2,
- "end_offset" : 8,
- "type" : "<ALPHANUM>",
- "position" : 2
- }, {
- "token" : "cool",
- "start_offset" : 9,
- "end_offset" : 13,
- "type" : "<ALPHANUM>",
- "position" : 3
- }, {
- "token" : "guy",
- "start_offset" : 14,
- "end_offset" : 17,
- "type" : "<ALPHANUM>",
- "position" : 4
- }]
我们的description字段的值转换成了[pretty], [cool], [guy], 在转换过程中大写的A, 标点符号都被filter过滤掉了, Pretty也转成了全小写的pretty, 这里比较重要的是, 即使ES存储数据的时候仍然存储的是完整的数据, 但是可以搜索到这条数据的关键字只剩下这三个单词了, 其他的都是抛弃掉了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。