美文网首页
ElasticSearch学习(一):Mapping的使用

ElasticSearch学习(一):Mapping的使用

作者: Jounghu | 来源:发表于2019-01-16 18:10 被阅读0次

    问题

    1. 什么是index mapping?
    2. mapping 有什么用?
    3. 如何设置mapping?
    4. 如何动态设置mapping?

    1.什么是Index mapping

    个人理解类似于MySQL字段的定义,可以定义是什么类型,但是Es作为一个索引中间件,肯定支持中文分词等一些其他特性

    官网理解:

    官网Mapping解释

    mapping可以定义文档字段:

    - 哪些字符串应该被当做全文字段
    - 这些字段分别是什么类型
    - 这些字段是否索引到catch-all字段中
    - 可以格式化某些value
    - 自定义规则去mapping 动态添加的字段
    

    官网和我理解不相上下!

    2.mapping 有什么用?

    ES mapping 就是对索引中的字段做一些声明。比如字符串用什么分词器,索引用不用分词等约束

    3.如何设置mapping?

    创建一个索引:

    curl -XPOST "http://127.0.0.1:9200/test-mapping"
    
    创建索引

    假设索引type为doc,创建mapping:

    curl -XPUT http://localhost:9200/test-mapping/doc/_mapping -d '
    {
        "doc": {
            "_source": {
                "enabled": true
            },
            "_all": {
                "enabled": false
            },
            "properties": {
                "uuid": {
                    "type": "keyword"
                },
                "username": {
                    "type": "text"
                },
                "password": {
                    "type": "text"
                },
                "device_id": {
                    "type": "keyword"
                },
                "user_id": {
                    "type": "keyword"
                }
            }
        }
    }
    '
    
    设置ES-Mapping

    4.如何动态设置mapping?

    比如有多个index,名字为 teiba_1, tieba_2这样我们就会做很多重复的工作去为每一个index创建mapping,当然ES帮我们想到了这一点,可以设置一个模板,然后相同类型(正则匹配上)的Index就可以应用相同的mapping

    curl -XPUT http://localhost:9200/_template/tieba_template -d '
    {
        "order": 1,
        "template": "tieba*",
        "mappings": {
          "_default_": {
            "properties": {
              "content": {
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_max_word"
              }
            }
          }
        }
    }
    
    '
    
    设置ES-Mapping-Template

    创建两个index: tieba1 tieba2

    curl -XPOST http://localhost:9200/tieba1
    curl -XPOST http://localhost:9200/tieba2
    

    然后查看这2个index的mapping

    tieba1-mapping tieba2-mapping

    可以看到这2个index都成功应用了这个template的mapping

    总结

    • mapping 作用就是定义字段类型,以及分词器,格式化之类的约束
    • 通过设置templte可以动态为index设置mapping

    参考

    ES官网解释Mapping

    ES查询语法

    相关文章

      网友评论

          本文标题:ElasticSearch学习(一):Mapping的使用

          本文链接:https://www.haomeiwen.com/subject/okxvdqtx.html