如何在elaticsearch中的新索引中确定映射

时间:2017-05-26 08:00:47

标签: elasticsearch logstash elastic-stack

我正在通过logstash添加一个新字段,如下所示:

 if [message] =~ /.+SLOW QUERY/ {
    grok {
        match => ["message", "SLOW QUERY.+%{NUMBER:slow_query:double}ms"]
    }
 }

但该字段是使用类型字符串创建的。

获取indexName / _mapping 输出

      "slow_query": {
        "type": "text",
        "norms": false,
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }

为了解决这个问题,我将数据重新索引到具有正确数据类型(double)的新索引中,但是第二天(索引每天自动创建),创建的索引包含字符串数据类型。

注意: elasticsearc.yml没有设置(除了群集/节点名称),所有默认值

  • 如何在elaticsearch的新索引中确定映射?
  • 如何强制新索引为slow_query字段采用正确的数据类型(double)?
  • 是否存在某种索引模板?

1 个答案:

答案 0 :(得分:2)

通过在Elasticsearch中定义index template来控制该特定索引集的映射。

default template Logstash is using for ES 5.x indices开始,我已经使用了大部分内容,并将slow_query明确地添加为double。第二天,Logstash将使用该模板名称创建另一个索引my_daily_indices_name-* Elasticsearch将看到它与此模板匹配,并使用该定义创建索引并将slow_query强制为double

PUT /_template/my_template
{
  "template": "my_daily_indices_name-*",
    "mappings" : {
    "_default_" : {
      "_all" : {"enabled" : true, "norms" : false},
      "dynamic_templates" : [ {
        "message_field" : {
          "path_match" : "message",
          "match_mapping_type" : "string",
          "mapping" : {
            "type" : "text",
            "norms" : false
          }
        }
      }, {
        "string_fields" : {
          "match" : "*",
          "match_mapping_type" : "string",
          "mapping" : {
            "type" : "text", "norms" : false,
            "fields" : {
              "keyword" : { "type": "keyword" }
            }
          }
        }
      } ],
      "properties" : {
        "@timestamp": { "type": "date", "include_in_all": false },
        "@version": { "type": "keyword", "include_in_all": false },
        "geoip"  : {
          "dynamic": true,
          "properties" : {
            "ip": { "type": "ip" },
            "location" : { "type" : "geo_point" },
            "latitude" : { "type" : "half_float" },
            "longitude" : { "type" : "half_float" }
          }
        },
        "slow_query": {
          "type": "double"
        }
      }
    }
  }
}