ElasticSearch 之 Mapping 映射

主要在于了解,在工作实践中去选择去应用这些类型和属性。

一、什么是映射?

映射是定义文档及其包含的字段的存储和索引方式的过程。

二、两种映射方式

  • dynamic mapping(动态映射或自动映射)
  • expllcit mapping (静态映射或手工映射或显示映射)

三、查看 mapping

GET /index/_mappings

四、ES 数据类型

        常见类型:

        1.数字类型:

long integer short byte double float half_float scaled_float unsighed_long

        2.Keywords:

keyword:适用于索引结构化的字段,可用于过滤、排序、聚合。keyword 类型的字段只能通过(exact value)搜索到。Id 应该用 keyword。

constant_keyword:始终包含相同值的关键字字段。

wildcard:可针对类似 grep 的通配符查询优化日志行和类似的关键字。

关键字字段通常用于排序,汇总和 term 查询。

        3.Dates(时间类型):包括 date 和 date nanos。

        4.alias:为现有字段定义别名。

        5.binary(二进制)

        6.range(区间类型)

integer_range float_range long_range double_range date_range

         7.text:

应该使用 text 类型来定义需要被全文搜索的字段,设置 text 类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分析器分成一个个词项,text 类型的字段不用于排序、很少用于聚合。

为啥不会为 text 创建索引?

会产生大量堆空间,尤其是在加载高基数 text 字段时,字段一旦加载到堆中,就在该段的生命周期内保持在那里,加载字段数据是一个昂贵的过程,可能导致用户遇到延迟问题。这就是默认情况下禁用字段数据的原因。  

 对象关系类型:

        1.object:用于单个对象;

        2.nested:用于 JSON 对象数组;

        3.flattened:允许将整个 JSON 对象索引为单个字段。

结构化类型:

        1.geo-point:纬度/经度积分;

        2.geo-shape:用于多边形等复杂形状;

        3.point:笛卡尔坐标点;

        4.shape:笛卡尔任意几何图形

特殊类型:

        1.IP地址:用于 IPv4 和 IPv6 地址;

        2.completion:提供自动完成建议;

        3.tocken_count:计算字符串中令牌的数量;

        4.murmur3:在索引时计算值的哈希并将其存储在索引中;

        5.annotated-text:索引包含特殊标记的文本(通常用于表示命名实体);

        6.percolator:接受来自 query-dsl 的查询;

        7.join:为同一索引内的文档定义父/子关系;

        8.rank features:记录数字功能以提高查询时的点击率;

        9.dense vector:记录浮点值的密集向量;

        10.sparse vector:记录浮点值的稀疏向量;

        11.search-as-you-type:针对查询优化的文本字段,以实现按需输入的完成;

        12.histogram:histogram 用于百分位数聚合的预聚合数值;

        13.constant keyword:keyword 当所有文档都具有相同值时的情况的专业化。

数组:

       1.array:在 es 中,数组不需要专用的字段数据类型,默认情况下,任何字段都可以包含零个或多个值,但是,数组中的所有值都必须具有相同的数据类型。

新增:

        1.date_nanos:date plus 纳秒

        2.features

五、两种映射类型

        Dynamic field mapping

插入数据类型=>映射成的类型
整数=>long
浮点数=>float
true || false=>boolean
日期=>date
数组=>取决于数组中的第一个有效值
对象=>object
字符串=>如果不是数字和日期类型,那会被映射成 text 和 keyword 两个类型。

       利用动态映射创建索引            查看类型

        Expllcit field mapping:手动映射

PUT /product
{
    "mapping":{
        "properties":{
            "field":{
                "mapping_parameter":"parameter_value"
            }
        }
    }

}

 eg:

PUT /product
{
    "mapping":{
        "properties":{
            "date":{
                "type":"text"
            }
        }
    }

}

 六、映射参数

        1.index:是否对创建当前字段创建索引,默认 true,如果不创建索引,该字段不会通过索引被搜索到,但是仍然会在 source 元数据中表示。

        2.analyzer:指定分析器(character filter、tokenizer、Token filter)。

        3.boost:对当前字段相关度的评分权重,默认1。

        4.coerce:是否允许强制类型转换。

        5.copy_to:该参数允许将多个字段的值复制到组字段中,然后可以将其作为单个字段进行查询。

        6.doc_values:为了提升排序和聚合效率,默认 true,如果确定不需要对字段进行排序或聚合,也不需要通过脚本访问字段值,则可以禁用 doc 值以节省磁盘空间(不支持 text 和 annotated_text)

        7.dynamic:控制是否可以动态添加字段,默认 true 新检测到字段将被添加到映射中;false 的时候新检测到的字段将被忽略,这些字段将不会被索引,因此将无法搜索,但是仍然会出现在 _source 返回的匹配项中,这些字段不会添加到映射中,必须显式添加新字段;strict 如果检测到新字段,则会引发异常并拒绝文档,必须将新字段显式添加到映射中。

         8.eager_global_ordinals:用于聚合的字段上,优化聚合性能。Forzen indices (冻结索引) ,有些索引使用率很高,会被保存在内存中,有些使用率特别低,宁愿在使用的时候重新创建,在使用完毕后丢弃数据,Frozen indices 的数据命中频率小,不适用与高搜索负载,数据不会被保存在内存中,堆空间占用比普通索引少得多,Frozen indices 是只读的,请求可能是秒级或者分钟级,eager_global_ordinals 不适用于 Frozen indices。

        9.enable:是否创建倒排索引,可以对索引操作,如果不创建索引,仍然可以检索并且在 _source 元数据中展示,谨慎使用,该状态无法修改。

PUT my_index
{
    "mappings":{
            "enable":false
        }
}

        10.fielddata:查询时内存数据结构,在首次使用当前字段聚合、排序或在脚本中使用时,需要字段以 fielddata 数据结构,并且创建倒排索引保存到堆中。

        11.fields:给 field 创建多个字段,用于不同目的(全文检索或者聚合分析排序)。

        12.format:格式化。

"date":{
    "type":"date",
    "format":"yyyy-MM-dd"
}

        13.ignore_above:超过长度将被忽略。

        14.ignore_malforme:忽略类型错误。

        15.index_options:控制将哪些信息添加到反向索引中以进行搜索和突出显示,仅用于 text 字段。

        16.Index_phrases:提升 exact_value 查询速度,但是要消耗更多磁盘空间。

        17.Index_prefixes:前缀搜索,min_chars 前缀最小长度,>0,默认2(包含);max_chars 前缀最大长度,<20,默认5(包含)。

        18.meta:附加元数据。

        19.normalizer

        20.norms:是否禁用评分(在filter 和聚合字段上应该禁用)。

        21.null_value:为 null 值设置默认值。

        22.position_increment_gap

        23.proterties:除了 mapping 还可用于 object 的属性设置。

        24. search_analyzer:设置单独的查询时分析器。

        25.similarity:为字段设置相关度算法,支持 BM25、classic(TF-IDF)、boolean。

        26.store:设置字段是否仅查询。

        27.term_vector:运维参数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

边学习边学着写点博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值