ES mapping

ES Mapping:映射

ES的mapping非常类似于java中的数据类型,可以用来设置字段中存储的数据的类型。但ES中的mapping的作用比数据类型广泛一些:

  • 定义索引这里面的字段和名称
  • 定义字段的数据类型,字符串、布尔、数字......
  • 字段,倒排索引相关的配置,是否分词。

当你的查询没有返回相应的数据, 你的mapping很有可能有问题。当你拿不准的时候, 直接检查你的mapping。

剖析mapping:

一个mapping由一个或多个analyzer组成, 一个analyzer又由一个或多个filter组成的。当ES索引文档的时候,它把字段中的内容传递给相应的analyzer,analyzer再传递给各自的filters。

filter的功能:一个filter就是一个转换数据的方法, 输入一个字符串,这个方法返回另一个字符串,比如一个将字符串转为小写的方法就是一个filter很好的例子。

一个analyzer由一组顺序排列的filter组成,执行分析的过程就是按顺序一个filter一个filter依次调用, ES存储和索引最后得到的结果。

总结来说, mapping的作用就是执行一系列的指令将输入的数据转成可搜索的索引项。

创建mapping:

ES 创建mapping 可以由ES自动创建,也可以用户自定义创建。

        动态映射(dynamic mapping)

  • 字段及其映射类型不必在使用前事先定义好,这得益于动态映射的应用。
  • 动态映射能够根据文档索引过程来自动生成映射类型和字段名。
  • 动态映射规则可以用来定义新类型和新字段的映射。

显式映射(explicit mappings)--- 手动定义mapping映射

如果你比 ES 通过猜测来确定映射更加了解你的数据,那么定义一个动态映射将会很有用。不过有时候你可能需要指定自己的显式映射。

显式映射可以在创建索引时候定义,或者用 mapping API 来为已有的索引添加映射类型或字段。 

从上面ES自动生成的mapping映射中可以看到mapping的一些属性,如type、fields、keywords、ignore_above等属性信息。在我们自己定义索引的mapping时可以手动设置这些属性值。下面我们看看mapping的一些常用属性以及属性代表的含义:

一级属性二级属性三级属性说明
dynamic  新增字段自动模式;true:表示自动识别新字段并创建索引,false:不自动索引新字段,strict:遇到未知字段,抛异常,不能存入
_timestamp  是否使用时间戳,ES会自动加时间戳,使用的话请百度
properties  属性列表(类似数据库多个字段定义)
 {字段名} es中存储数据的字段
  type数据类型,可以说设置任何es支持的数据类型
  index映射选型,meta-fields、fields or properties 两种映射类型
  doc_values布尔值, 对not_analyzed字段,默认都是开启,分词字段不能使用,对排序和聚合能提升较大性能,节约内存
  format如果数据类型为日期格式,传入值得时候是字符串,ES需要一个格式进行识别,如:yyyy-MM-dd HH:mm: ss
  analyzer指定分词器,如ik,ansj(中文分词)
  boost浮点型,字段级别的分数加权(权重)
  ignore_above超过多少字符,就不处理,分词性能损耗较大,对字符串较长的可不分词
  null_value设置一些缺失字段的初始化值,只有string可以使用,分词字段的null值也会被分词
  store是否单独设置此字段的是否存储而从_source字段中分离,默认是false,只能搜索,不能获取值
  search_analyzer指定搜索时的分词器,默认跟ananlyzer是一致的,比如index时用standard+ngram,搜索时用standard用来完成自动提示功能
  其它similarity,term_vector,norms,include_in_all,index_options,fielddata,ignore_malformed,precision_step
_sourceenable 

用于存储整个文档的原始值,默认为true, 一般不会设为false, 那会影响很多功能的使用。

 dynamic 可以设成 false、true 、strict,三个值的对比

 truefalsestrict
文档可索引YYY
字段可索引YNN

mapping被更新

YNN

Meta-fields
              元数据字段用于定义文档的元数据字段的特征,文档的元数据字段主要包括_index、_type、_id、_source这4个字段。

Fields or properties
              属性字段列表,通过properties字段定义整个文档有效载荷的各字段的数据类型、分词器等属性。 

自定义mapping:

PUT "index_2"    # 索引名
{
    "mappings": {
      "user2": {   # 类型名
        "dynamic":"strict",  #dynamic属性
        "properties": {      # 字段列表
          "age": {           #字段名
            "type": "long"   #字段类型
          },
          "birthday": {
            "type": "date"
          },
          "name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值