ElasticSearch之类型映射_mapping

ElasticSearch中的映射(Mapping)用来定义一个文档,可以定义所包含的字段以及字段的类型、分词器及属性等等。

一、什么是mapping

类似于数据库中的表结构定义,主要作用如下:

  • 定义Index下字段名(Field Name)
  • 定义字段的类型,比如数值型,字符串型、布尔型等
  • 定义倒排索引的相关配置,比如是否索引、记录postion等

Elasticsearch 支持
如下简单域类型:

  • 字符串:
    • keyword:用于全文索引,该类型的字段将通过分词器进行分词,最终用于构建索引
    • text:不分词,只能搜索该字段的完整的值,只用于 filtering
  • 整数 : byteshortintegerlong
  • 浮点数: floatdouble
  • 布尔型: boolean
  • 日期: date

映射可以分为动态映射和静态映射。

1、动态映射

在关系数据库中,需要事先创建数据库,然后在该数据库实例下创建数据表,然后才能在该数据表中插入数据。而ElasticSearch中不需要事先定义映射(Mapping),文档写入ElasticSearch时,会根据文档字段自动识别类型,这种机制称之为动态映射。

JSON数据

自动推测的类型

null没有字段被添加
true或falseboolean型
小数float型
数字long型
日期date或text
字符串text
数组由数组第一个非空值决定
JSON对象object类型

2、静态映射 

当然,在ElasticSearch中也可以事先定义好映射,包含文档的各个字段及其类型等,这种方式称之为静态映射。

相对于动态映射,静态映射可以添加更加详细字段类型、更精准的配置信息等

index 属性控制:

  • analyzed 首先分析字符串,然后索引它。换句话说,以全文索引这个域。
  • not_analyzed  索引这个域,所以它能够被搜索,但索引的是精确值。不会对它进行分析。
  • no 不索引这个域。这个域不会被搜索到。

Elasticsearch 6.x Mapping设置_小旋锋的博客-CSDN博客

elasticsearch篇之mapping_lyzkks的博客-CSDN博客_elasticsearch mapping

二、剖析mapping

  • 一个mapping由一个或多个analyzer组成, 一个analyzer又由一个或多个filter组成的。当ES索引文档的时候,它把字段中的内容传递给相应的analyzer,analyzer再传递给各自的filters。
  • filter的功能很容易理解:一个filter就是一个转换数据的方法, 输入一个字符串,这个方法返回另一个字符串,比如一个将字符串转为小写的方法就是一个filter很好的例子。
  • 一个analyzer由一组顺序排列的filter组成,执行分析的过程就是按顺序一个filter一个filter依次调用, ES存储和索引最后得到的结果。

总结来说, 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"

四、analyze分析器

1、默认分析器

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存储数据的时候仍然存储的是完整的数据, 但是可以搜索到这条数据的关键字只剩下这三个单词了, 其他的都是抛弃掉了。

2、IK分析器

  • ik-smart

  • ik-max-word

3、拼音分析器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值