zoukankan      html  css  js  c++  java
  • Elasticsearch中Mapping

    映射(Mapping)

    概念:创建索引时,可以预先定义字段的类型以及相关属性。从而使得索引建立得更加细致和完善。如果不预先设置映射,会自动识别输入的字段类型。

    官方文档(字段数据类型):https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html

    官方文档(映射参数):https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html

    映射分为静态映射动态映射

    动态映射:文档中碰到一个以前没见过的字段时,动态映射可以自动决定改字段的类型,并对改字段添加映射。通过dynamic属性进行控制,默认值为true,动态添加;false忽略新字段;strict碰到陌生字段抛出异常。

    建立静态映射:

    curl -XPOST 'http://localhost:9200/library' -d '
    {
      "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
      },
      "mappings": {
        "books": {
          "properties": {
            "title": {
              "type": "string"
            },
            "name": {
              "type": "string",
              "index": "not_analyzed"
            },
            "publish_date": {
              "type": "date",
              "index": "not_analyzed"
            },
            "price": {
              "type": "double"
            },
            "number": {
              "type": "integer"
            }
          }
        }
      }
    }
    '

    动态映射:

    必须为object类型才能添加dynamic动态映射

    {
        "mappings": {
            "books": {
                "dynamic": "strict",
                "properties": {
                    "title": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string",
                        "index": "not_analyzed"
                    },
                    "publish_date": {
                        "type": "date",
                        "index": "not_analyzed"
                    },
                    "price": {
                        "type": "double"
                    },
                    "number": {
                        "type": "object",
                        "dynamic": true
                    }
                }
            }
        }
    }

    获取某个索引下的映射信息

    curl -XGET localhost:9200/library/_mapping

    更新修改映射

    mapping一旦建立,就不能修改现有的字段映射。如果要推倒现有的映射,必须得重新建立一个索引,然后重新定义映射,将之前索引里的数据导入到新建立得索引中。

    1. 给现有的索引定义一个别名,并且把现有的索引指向这个别名
    2. 运行 curl -XPUT localhost:9200/现有索引/_alias/别名A
    3. 新创建一个索引,定义好最新的映射
    4. 将别名指向新的索引,并且删除之前索引的执行
    5. 运行
    curl -XPOST 'localhost:9200/_aliases' -d '
    {
        "actions": [
            {
                "remove": {
                    "index": "现有索引名",
                    "alias": "别名A"
                }
            },
            {
                "add": {
                    "index": "新建索引名",
                    "alias": "别名A"
                }
            }
        ]
    }
    '

    以上无需停机即可完成。

  • 相关阅读:
    C# 通过反射初探ORM框架的实现原理
    Redis-Nosql数据库入门
    HTTPS 建立连接的详细过程
    Spring面试题
    struts2面试整理
    Java面试基本知识
    Spring MVC面试整理
    Mybatis面试整理
    Sublime 正则替换
    Hiberante知识点梳理
  • 原文地址:https://www.cnblogs.com/zqwby-0708/p/7872973.html
Copyright © 2011-2022 走看看