TypechoJoeTheme

IT技术分享

统计

06. ES映射mapping定义及设置——ElasticSearch基础专栏

2022-09-06
/
0 评论
/
1,355 阅读
/
正在检测是否收录...
09/06

一、动态映射

Elasticsearch在用户写入数据时检测到新的字段时,会动态地将该字段添加到类型映射中,由dynamic参数来控制此行为。

可以通过将dynamic参数设置为true或明确指示Elasticsearch根据传入的文档来动态创建字段。

1.1 禁用日期检测

PUT myindex
{
  "mappings": {
    "date_detection": false
  }
}

#写入文档数据(默认使用动态映射创建索引映射)
PUT myindex/_doc/1
{
  "create_date": "2021/09/02"
}

#查询索引映射
GET myindex/_mapping

得到的结果

{
  "myindex" : {
    "mappings" : {
      "date_detection" : false,
      "properties" : {
        "create_date" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

1.2 自定义日期检测格式

创建索引映射中日期的自定义格式

PUT myindex
{
  "mappings": {
    "dynamic_date_formats": ["yyyy/MM/dd"]
  }
}

1.3 数字检测

创建映射并使用数字检测模式

PUT myindex
{
  "mappings": {
    "numeric_detection": true
  }
}

二、动态映射模板

动态映射模板使得在默认的动态字段映射规则之外能够更好地控制Elasticsearch如何映射数据

2.1 动态映射模板设置

可以通过将dynamic参数设置为true来启用动态映射模式,然后使用动态模板来定义自定义映射,这些映射可以根据匹配条件应用于动态添加的字段

  • match_mapping_type:表示对Elasticsearch检测到的数据类型进行操作。
  • match和unmatch:表示使用模式匹配来匹配字段名称。
PUT myindex
{
  "mappings": {
    "dynamic_templates": [
      {
        "my_integers_mapping": {
          "match_mapping_type": "long",
          "mapping": {
            "type": "integer"
          }
        }
      },
      {
        "my_strings_mapping": {
          "match_mapping_type": "string",
          "mapping": {
            "type": "text",
            "fields": {
              "raw": {
                "type":  "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    ]
  }
}
将所有整数字段映射为integer而不是long,所有string字段都映射为text和keyword

2.2 禁用索引中的评分

PUT myindex
{
  "mappings": {
    "dynamic_templates": [
      {
        "strings_as_keywords": {
          "match_mapping_type": "string",
          "mapping": {
            "type": "text",
            "norms": false,    // 关闭评分功能
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    ]
  }
}

2.3 数字字段禁用创建索引

在进行时间序列分析时,通常会有许多数字字段,一般会对这些字段进行聚合计算,并不会通过这些字段进行搜索。

在这种情况下,我们可以关闭对这些字段创建索引的功能,这样做不仅可以节省磁盘空间,还可以提升索引库的性能。

PUT myindex
{
  "mappings": {
    "dynamic_templates": [
      {
        "unindexed_longs": {
          "match_mapping_type": "long",
          "mapping": {
            "type": "long",
            "index": false #禁止创建索引(本质是禁止该字段中的字符串被分词建立索引)
          }
        }
      },
      {
        "unindexed_doubles": {
          "match_mapping_type": "double",
          "mapping": {
            "type": "float",
            "index": false
          }
        }
      }
    ]
  }
}

2.4 根据字段名称映射

PUT myindex
{
    "mappings": {
        "dynamic_templates": [
            {
                "longs_as_strings": {
                    "match_mapping_type": "string",
                    "match": "long_*",
                    "unmatch": "*_text",
                    "mapping": {
                        "type": "long",
                        "enable": false
                    }
                }
            },
            {
                "longs_as_strings": {
                    "match_pattern": "regex",
                    "match": "^profit_\\d+$",
                    "mapping": {
                        "type": "long",
                        "index": false,
                        "norms": false,
                        "doc_values": false
                    }
                }
            }
        ]
    }
}

2.5 根据对象路径映射

针对对象中包含对象的情况

字段路径映射是使用path_match或者path_unmatch参数的值来进行控制的

PUT myindex
{
  "mappings": {
    "dynamic_templates": [
      {
        "full_name": {
          "path_match":   "person.*", // 表示可以匹配到person中的任意字段
          "path_unmatch": "*.desc",   // 表示可匹配到任意对象下的desc字段
          "mapping": {
            "type":       "text",
            "copy_to":    "full_name"
          }
        }
      }
    ]
  }
}

三、显式映射

PUT /myindex
{
  "mappings": {
     "properties": {
         "name":{
            "type": "text"
         },
         "age":{
           "type": "long"
         },
          "actiontime":
          {
            "type": "date",
            "format":"yyyy-MM-dd HH:mm:ss"
          },
          "describe":
          {
            "type": "keyword"
          }
     }
  }
}
朗读
赞 · 0
版权属于:

IT技术分享

本文链接:

https://idunso.com/archives/2895/(转载时请注明本文出处及文章链接)