当前位置:   article > 正文

ElasticSearch之类型映射_mapping_elasticsearch mapping的类型

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相关

  1. //创建mapping
  2. curl -u $user:$password -H "Content-Type:application/json" -XPUT "http://$ip:$port/$index/_mapping/_doc?pretty" -d '{
  3. "properties":{
  4. "properties":{
  5. "id":{
  6. "type":"long"
  7. },
  8. "task_type":{
  9. "type":"keyword"
  10. },
  11. "task_info":{
  12. "type":"text",
  13. "analyzer":"ik_max_word"
  14. },
  15. "t_score":{
  16. "type":"double"
  17. },
  18. "create_time":{
  19. "type":"date",
  20. "format":"yyyy-MM-dd HH:mm:ss"
  21. },
  22. "tag":{
  23. "type":"text",
  24. "analyzer":"comma"
  25. },
  26. "department_tag":{
  27. "type":"integer"
  28. }
  29. }
  30. }
  31. }'
  32. //查看mapping
  33. 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。

  1. ​curl -X GET "http://$ip:port/$index/_analyze?analyzer=standard&pretty=true" -d "A Pretty cool guy."
  2. {
  3.   "tokens" : [{
  4.     "token" : "pretty",
  5.     "start_offset" : 2,
  6.     "end_offset" : 8,
  7.     "type" : "<ALPHANUM>",
  8.     "position" : 2
  9.   }, {
  10.     "token" : "cool",
  11.     "start_offset" : 9,
  12.     "end_offset" : 13,
  13.     "type" : "<ALPHANUM>",
  14.     "position" : 3
  15.   }, {
  16.     "token" : "guy",
  17.     "start_offset" : 14,
  18.     "end_offset" : 17,
  19.     "type" : "<ALPHANUM>",
  20.     "position" : 4
  21.   }]

我们的description字段的值转换成了[pretty], [cool], [guy], 在转换过程中大写的A, 标点符号都被filter过滤掉了, Pretty也转成了全小写的pretty, 这里比较重要的是, 即使ES存储数据的时候仍然存储的是完整的数据, 但是可以搜索到这条数据的关键字只剩下这三个单词了, 其他的都是抛弃掉了。

2、IK分析器

  • ik-smart

  • ik-max-word

3、拼音分析器

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/503750
推荐阅读
相关标签
  

闽ICP备14008679号