• 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# Winform 国际化
    Could not find method google() for arguments [] on repository container,rn 集成react-native-camera 出现此错误的解决方法
    RN集成echarts4图表组件react-native-secharts(转载)
    DataGridView设置行高
    react native原生模块引用本地jar包
    react-native-printer
    phpstudy连接SQL Server 2008数据库 以及 php使用sql server出现乱码解决方式
    Apache崩掉:为进程配置合适的线程数
    引用静态资源时加上时间戳,处理浏览器缓存问题
    利用存储过程优化复杂的数据库操作
  • 原文地址:https://www.cnblogs.com/zqwby-0708/p/7872973.html
Copyright © 2020-2023  润新知