Mapping

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

  • 定义Index下的字段名(Field Name)
  • 定义字段的类型,比如数值型、字符串型、布尔型
  • 定义倒排索引相关的配置,比如是否索引、记录position等

自定义Mapping

自定义Mapping的api如下:

  • Mapping中的字段类型一旦设定后,禁止直接修改,原因是:
    • Lucence实现的倒排索引生成后不允许修改,
  • 除非重新建立新的索引,然后做reindex操作。
  • 允许新增字段。
  • 通过dynamic参数来控制字段的新增:
    • true(默认)允许自动新增字段
    • false不允许自动新增字段,但是文档可以正常写入,但无法对字段进行查询等操作
    • strict 文档不能写入,报错

copy_to

index

  • 控制当前字段是否索引,默认为true,即记录索引,false不记录,即不可搜索。
  • 当身份证号和手机号这样的敏感信息被搜索的时候,可以设置为false,这样就可以不用建立倒排索引节省空间

index_options

  • index_options用于控制倒排索引记录的内容,有如下4中配置:
    • docs 只记录doc id
    • freqs 记录doc id和term frequencies
    • positions 记录doc id、term frequencies和term position
    • offsets 记录doc id、term frequencies、term position和character offsets
    • text类型默认配置为positions,其他默认为docs
  • 记录内容越多,占用空间越大

index_options的设定如下所示:

null_value

  • 当字段遇到null值时的处理策略,默认为null,即空值,此时es会忽略该值。可以通过设定该值设定字段的默认值。

数据类型

核心数据类型

  • 字符串型 text、keyword
  • 数值型 long、integer、short、byte、double、float、half_float、scaled_float
  • 日期类型date
  • 布尔类型 boolean
  • 二进制类型 binary
  • 范围类型 integer_range、float_range、long_range、double_range、date_range

复杂数据类型

  • 数组类型 array
  • 对象类型 object
  • 嵌套类型 nested object

地理位置数据类型

  • geo_point
  • geo_shape

专用类型

  • 记录ip
  • 实现自动补全completion
  • 记录分次数token_count
  • 记录字符串hash值 murmur3
  • percolator
  • join

多字段特性 multi-fields

  • 允许对同一个字段采用不同的配置,比如分词,常见例子如对人名实现拼音搜索,只需要在人名中新增一个字段为pinyin即可

dynamic Mapping

  • es可以自动识别文档字段类型,从而降低用户使用成本,如下所示:

  • es是依靠json文档的字段类型来实现自动识别字段类型,支持的类型有:

日期的自动识别可以自行配置日期格式,以满足各种需求

  • 默认是["strict_date_optional_time","yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"]
  • strict_date_optional_time是ISO datetime的格式,完整格式类似如下面:
    • YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
  • dynamic_date_formats 可以自定义日期类型
  • date_detection可以关闭日期自动识别的机制

字符串是数字时,默认不会自动识别为整型,因为字符串中出现数字时完全合理的

  • numeric_detection可以开启字符串中数字的自动识别,如下所示:

Dynamic Template

允许根据es自动识别的数据类型、字段名等来动态设定字段类型,可以实现如下效果:

  • 所有字符串类型都设定为keyword类型,即默认不分词
  • 所有以message开头的字段都设定为text类型,即分词
  • 所有以long_开头的字段都设定为long类型
  • 所有自动匹配为double类型的都设定为float类型,以节省空间

匹配规则一般有如下几个参数:

  • match_mapping_type匹配es自动识别的字段类型,如boolean,long,string等
  • match,unmatch匹配字段名
  • path_match,path_unmatch匹配路径

自定义mapping的建议

自定义Mapping的操作步骤如下:

  • 1、写入一条文档到es的临时索引中,获取es自动生成的mapping
  • 2、修改步骤1得到的mapping,自定义相关配置
  • 3、使用步骤2的mapping穿件实际所需索引

索引模板

英文为Index Template,主要用于在新建索引时自动应用预先设定的配置,简化索引创建的操作步骤

  • 可以设定索引的配置和mapping
  • 可以有多个模板,根据order设置,order大的覆盖小的配置

参考: https://www.jianshu.com/p/449342767f5f