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

    什么是Mapping

    Mapping是类似于数据库中的表结构定义,主要作用如下:

      定义索引中的字段名

      定义字段类型,比如数值型、浮点型、布尔型等

      定义倒排索引相关的设置,比如是否索引、记录position等

    Mapping会把Json文档映射成Lucene所需要的扁平格式

      一个Mapping属于一个索引的Type

      每个文档都属于一个Type

      一个Type有一个Mapping的定义

      7.0开始,不需要在Mapping定义中指定Type信息

    字段的数据类型

    简单类型

      Text,keyword,date,long,double,Boolean,ip

    支持json层次的数据类型

      object,nested

    特殊类型

      geo_point&geo_shape/completion

     什么是Dynamic Mapping

    在写入文档时,如果索引不存在,会自动创建索引

    Dynamic Mapping的机制,使得我们无需手动定义Mappings。Elasticsearch会自动根据文档信息推算出字段类型,但是有时候推算的不对。

    当类型不对时,会导致一些功能无法正常使用

     

     能否更改Mapping的字段类型

    两种情况

      新增加字段

      Dynamic设为true时,一但有新增字段的文档写入,Mapping也同时被更新

      Dynamic设为false时,Mapping不会被更新,新增字段的数据无法被索引,但是信息会出现在_source中

      Dynamic设置为Strict,文档写入失败

    PUT dynamic_mapping_test/_doc/1
    {
      "newfiled":"sonevalue"
    }

    PUT dynamic_mapping_test/_doc/10
    {
      "newfiled":"sonevalue",
      "truefiled":"somevalue"
    }
    GET dynamic_mapping_test/_search
    {
      "query":{
        "match":{
          "truefiled":"somevalue"
        }
      }
    }


    PUT dynamic_mapping_test/_mapping
    {
      "dynamic":false
    }
    PUT dynamic_mapping_test/_doc/10
    {
      "newfiled":"sonevalue",
      "abotherfiled":"somevalue"
    }
    GET dynamic_mapping_test/_search
    {
      "query":{
        "match":{
          "abotherfiled":"somevalue"
        }
      }
    }

    PUT dynamic_mapping_test/_mapping
    {
      "dynamic":"strict"
    }

    PUT dynamic_mapping_test/_doc/12
    {
      "lastfiled":"somevalue"
    }

     

     

  • 相关阅读:
    js 获取asp.net TextBox值
    项目笔记一
    如何取GridView中隐藏列的值
    使用bablepolyfill
    border: 0.5px
    选择查询固定位置的数据
    SQL用户数据库权限设置
    Java.1 HelloWorld的分析
    Java.2 面向对象
    【drupal实践】windows下drupal7.22develop版本安装
  • 原文地址:https://www.cnblogs.com/fat-girl-spring/p/12449144.html
Copyright © 2011-2022 走看看