zoukankan      html  css  js  c++  java
  • Elasticsearch学习系列之mapping映射

    什么是映射

    • 为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成全文本(Full-text)或精确(Exact-value)的字符串值,Elasticsearch需要知道每个字段里面都包含什么数据类型。这些类型和字段的信息存储在映射中
    • 创建索引的时候,可以预先定义字段的类型以及相关属性,相当于定义数据库字段的属性

    映射的分类

    静态映射

    动态映射

    什么是动态映射

    文档中碰到一个以前没见过的字段时,动态映射可以自动决定该字段的类型,并对该字段添加映射

    如何配置动态映射

    1. 通过dynamic属性进行控制
    2. true:默认值,动态添加字段; false:忽略新字段; strict:碰到陌生字段,抛出异常

    适用范围

    适用在根对象上或者object类型的任意字段上

    字段类型

    string 字符串
    integer 数字
    long A long value(64bit)
    float A floating-point number(32bit):such as 1,2,3,4
    double A floating-poing number(64bit)
    bool A bool value,such as True,False
    date such as:2017-02-20
    binary 二进制

    创建映射

    POST /library                  #给索引为library创建映射关系
    {
        "settings":{
        "number_of_shards" : 5,
        "number_of_replicas" : 1
    },
         "mappings":{
          "books":{          #索引为library的type类型为books
            "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
        }
            }
         }
         }
    }

    获取映射

    获取index为library的映射

    GET library/_mapping
    {
       "library": {
          "mappings": {
             "books": {
                "properties": {
                   "name": {
                      "type": "string",
                      "index": "not_analyzed"
                   },
                   "number": {
                      "type": "object",
                      "dynamic": "true"
                   },
                   "price": {
                      "type": "double"
                   },
                   "publish_date": {
                      "type": "date",
                      "format": "dateOptionalTime"
                   },
                   "title": {
                      "type": "string"
                   }
                }
             }
          }
       }
    }

    获取index为library,type为books的映射

    GET /libraryyry/_mapping/books

    获取集群内所有的映射信息

    GET /_all/_mapping/

    获取这个集群内某两个或多个type映射信息(books和bank_account映射信息)

    GET /_all/_mapping/books,bank_account

    删除映射

    DELETE /libraryry/books
    
    DELETE /libraryry/books/_mapping                #删除books的映射
    
    DELETE /libraryry/_mapping/books,bank_acount  #删除多个映射

    无法修改已经存在的mapping映射

    1.如果要推到现有的映射,你得重新建立一个索引.然后重新定义映射
    2.然后把之前索引里的数据导入到新的索引里
    -------具体方法------
    1.给现有的索引定义一个别名,并且把现有的索引指向这个别名,运行步骤2
    2.运行: PUT /现有索引/_alias/别名A
    3.新创建一个索引,定义好最新的映射
    4.将别名指向新的索引.并且取消之前索引的执行,运行步骤5
    5.运行: POST /_aliases
            {
                "actions":[
                    {"remove"    :    {    "index":    "现有索引名".    "alias":"别名A"    }}.
                    {"add"        :    {    "index":    "新建索引名",    "alias":"别名A"    }}
                ]
            }
    注意:通过这几个步骤就实现了索引的平滑过渡,并且是零停机
  • 相关阅读:
    51. spring boot属性文件之多环境配置【从零开始学Spring Boot】
    html的基本结构
    html的介绍
    SimpleDateFormat
    线程池
    写XML
    在解析XML时要注意解析元素和解析标签属性的区别
    9月2日笔记
    eclipse快捷提示原理
    form表单提交信息的方式
  • 原文地址:https://www.cnblogs.com/chadiandianwenrou/p/6426940.html
Copyright © 2011-2022 走看看