带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(5)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(5)

 《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.10.Dynamic Mapping(4) https://developer.aliyun.com/article/1230516



下面我们通过几个例子来说明一下匹配规则中的各个关键字如何使用。

 

match_mapping_type

 

match_mapping_type用于按照数据类型匹配,当用户想对 JSON 中具有某种数据类型的字段设置做特殊配置时,可以用此种匹配方式。该字段可配置的数据类型有如下几种:

 

l boolean,匹配值是 true 或 false 的字段。

date,当字符串开启了时间类型识别且字符串符合预设日期格式则会被匹配

l double,匹配含有小数的字段

l long,匹配值是整型的字段

l object,匹配值是对象的字段

l string,匹配值是字符串的字段

l *,表示所有数据类型即匹配所有字段

 

之前我们提到 Elasticsearch 会自动将整型字段自动创建为long型,如果我们知道文档中所有数值都不会超过int范围,那么我们可以用如下配置,让所以非小数的数值字段自动创建为

integer类型。

 

PUT test-dynamic-mapping
{
  "mappings": {
    "dynamic_templates": [
      {
        "test_float": {
          "match_mapping_type": "long", # 值是整型的字段会被匹配
          "mapping": {
            "type": "integer"  # 字段 type 统一设为 integer
          }
        }
      }
    ]
  }
}

match 、unmatch

 

在生产使用中最多的场景,是根据字段的名称进行匹配。这时就可以用matchunmatch这两种匹配方式。match匹配的是符合设置的所有字段,unmatch匹配的是不符合某种配置的所有字段。在设置匹配规则时可以使用*表 0 个或多个字符。


比如下面这个模板就表示所有属性名以long_开头且不以_text结尾的字段配置其type为long。

PUT test-dynamic-mapping
{
  "mappings": {
    "dynamic_templates": [
      {
        "test_float": {
          "match": "long_*", # 属性名以 long_ 开头
          "unmatch": "*_test", # 属性名不以 _test 结尾
          "mapping": {
            "type": "long"  # 字段 type 设为 long
          }
        }
      }
    ]
  }
}

match_pattern

 

仅仅使用通配符,可能不能满足我们多变的匹配需求,那么我们可以将match_pattern设为

regex,这时match字段就可以用正则表达式了。

 

比如下面这个模板就表示所有以profit_开头,后跟至少 1 位数字的属性,将它们的type设为keyword

 

PUT test-dynamic-mapping
{
  "mappings": {
    "dynamic_templates": [
      {
        "test_float": {
          "match_pattern": "regex",  # match 使用正则表达式
          "match": "^profit_\d+$"  # 标准正则
          "mapping": {
            "type": "keyword"  # 字段 type 设为 keyword
          }
        }
      }
    ]
  }
}



《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.10.Dynamic Mapping(6) https://developer.aliyun.com/article/1230513

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
12月前
|
索引
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(1)
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(1)
|
12月前
|
自然语言处理
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(4)
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(4)
|
12月前
|
存储 Java 大数据
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(6)
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(6)
|
12月前
|
JSON Java 数据格式
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(3)
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(3)
|
12月前
|
索引
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(2)
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(2)
|
12月前
|
存储 JSON 数据库
带你读《Elastic Stack 实战手册》之17:—— 3.4.2.2.理解mapping(上)
带你读《Elastic Stack 实战手册》之17:—— 3.4.2.2.理解mapping(上)
|
12月前
|
搜索推荐 API 索引
带你读《Elastic Stack 实战手册》之17:—— 3.4.2.2.理解mapping(下)
带你读《Elastic Stack 实战手册》之17:—— 3.4.2.2.理解mapping(下)
|
12月前
|
数据格式 索引
带你读《Elastic Stack 实战手册》之17:—— 3.4.2.2.理解mapping(中)
带你读《Elastic Stack 实战手册》之17:—— 3.4.2.2.理解mapping(中)
|
12月前
带你读《Elastic Stack 实战手册》之24:——3.4.2.9.Search template(1)
带你读《Elastic Stack 实战手册》之24:——3.4.2.9.Search template(1)
|
12月前
|
缓存 索引
带你读《Elastic Stack 实战手册》之24:——3.4.2.9.Search template(3)
带你读《Elastic Stack 实战手册》之24:——3.4.2.9.Search template(3)