elasticsearch 动态模板是否支持默认类型?,elasticsearch,mapping,elasticsearch,Mapping" /> elasticsearch 动态模板是否支持默认类型?,elasticsearch,mapping,elasticsearch,Mapping" />

elasticsearch 动态模板是否支持默认类型?

elasticsearch 动态模板是否支持默认类型?,elasticsearch,mapping,elasticsearch,Mapping,允许您根据以下内容定义可应用于动态添加字段的自定义映射: Elasticsearch检测到的数据类型,具有匹配映射类型 字段的名称,带有匹配和取消匹配或匹配模式 字段的完整虚线路径,带有路径匹配和路径取消匹配 我试图为所有字段设置一个默认类型关键字,而一些带有特定*后缀或前缀*的特殊字段可以指定如下类型,但结果所有字段最终都意外地成为关键字 { "order": 99, "index_patterns": [ "xxxx_st

允许您根据以下内容定义可应用于动态添加字段的自定义映射:

  • Elasticsearch检测到的数据类型,具有匹配映射类型
  • 字段的名称,带有匹配和取消匹配或匹配模式
  • 字段的完整虚线路径,带有路径匹配和路径取消匹配
我试图为所有字段设置一个默认类型
关键字
,而一些带有特定
*后缀
前缀*
的特殊字段可以指定如下类型,但结果所有字段最终都意外地成为
关键字

{
  "order": 99,
  "index_patterns": [
    "xxxx_stats_*"
  ],
  "settings": {
    "index": {
      "number_of_shards": "6",
      "number_of_replicas": "1"
    }
  },
  "mappings": {
    "_doc": {
      "dynamic": true,
      "_source": {
        "enabled": true
      },
      "dynamic_templates": [
        {
          "strings": {
            "match_mapping_type": "*",
            "unmatch": [
              "*Time",
              "*At",
              "is*"
            ],
            "mapping": {
              "ignore_above": 256,
              "null_value": "NULL",
              "type": "keyword"
            }
          }
        },
        {
          "timeSuffix": {
            "match_mapping_type": "*",
            "match": [
              "*Time",
              "*At"
            ],
            "mapping": {
              "type": "long"
            }
          }
        },
        {
          "isPrefix": {
            "match_mapping_type": "*",
            "match": "is*",
            "mapping": {
              "type": "boolean"
            }
          }
        }
      ],
      "date_detection": false,
      "numeric_detection": true
    }
  },
  "aliases": {
    "{index}-alias": {
      
    }
  }
}

AFAIK
match
unmatch
不能是数组,只能是字符串或正则表达式。所以试试这个:

{
  "dynamic_templates":[
    {
      "timeSuffix":{
        "match_mapping_type":"*",
        "match_pattern":"regex",
        "match":"^(.*Time)|(.*At)$",
        "mapping":{
          "type":"long"
        }
      }
    },
    {
      "isPrefix":{
        "match_mapping_type":"*",
        "match":"is*",
        "mapping":{
          "type":"boolean"
        }
      }
    },
    {
      "strings":{
        "match_mapping_type":"*",
        "mapping":{
          "ignore_above":256,
          "null_value":"NULL",
          "type":"keyword"
        }
      }
    }
  ]
}

我还发现,当您将
字符串
移到底部时,上面的两个映射将首先得到解决。否则,由于每个段都包括
match\u mapping\u type:“*”
,因此将应用第一个匹配段。这可能是相关的。

AFAIK
match
unmatch
不能是数组,只能是字符串或正则表达式。请尝试以下操作:

{
  "dynamic_templates":[
    {
      "timeSuffix":{
        "match_mapping_type":"*",
        "match_pattern":"regex",
        "match":"^(.*Time)|(.*At)$",
        "mapping":{
          "type":"long"
        }
      }
    },
    {
      "isPrefix":{
        "match_mapping_type":"*",
        "match":"is*",
        "mapping":{
          "type":"boolean"
        }
      }
    },
    {
      "strings":{
        "match_mapping_type":"*",
        "mapping":{
          "ignore_above":256,
          "null_value":"NULL",
          "type":"keyword"
        }
      }
    }
  ]
}

我还发现,当您将
字符串
移到底部时,将首先解析上面的2个映射。否则,由于每个段都包含
匹配映射类型“:“*”
,因此将应用第一个匹配段。这可能与此相关。

仅供参考,我建议将类似日期的字段映射到类型
日期
,不要太长。竖起大拇指!Joe感谢您的帮助,了解
regex
的工作方式非常有帮助。至于
日期
,它有点无处不在,我必须使用
时间戳
来遵循惯例;(无论如何,谢谢你的额外建议。好的,没问题!你当然可以在日期中使用时间戳:仅供参考,我建议将类似日期的字段映射到类型
date
,不要太长。竖起大拇指!乔感谢你的帮助,了解
正则表达式的工作方式非常有帮助。至于
日期
,它几乎是每个人都使用的。)re,我必须使用
时间戳来遵循例程;(无论如何,谢谢你的额外建议。好的,没问题!你当然可以在日期中使用时间戳: