• 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、拼音分析器

  • 相关阅读:
    一文带你了解 Linux 的 Cache 与 Buffer
    BootStrap基本使用
    体育场馆能源消耗监测管理平台,为场馆提供能源服务
    整理uvc驱动相关函数的调用流程
    Tyvj p1013 找啊找啊找GF
    vue2计算属性
    PoE压分如何解决,A-level复议or重考?
    Docker 架构解析:理解 Docker 引擎和容器运行时
    GAN里面什么时候用detach的说明
    【Android】华为市场上线pepk.jar使用
  • 原文地址:https://blog.csdn.net/spirit_8023/article/details/125526238