es - elasticsearch mapping - field data type - 4

63 阅读2分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

问 :es field 日期类型都有哪些?各自有什么特点?
答 :

1. 日期类型有 : date 和 date_nanos
2. date       : 内部以timestamps的million seconds存储
                可以进行字符串与时间格式的转化
                默认支持的格式 : 
                    1. yyyy-MM-dd 或 yyyy-MM-ddTHH:mm:ssZ
                    2. millionseconds-since-the-epoch
                    3. seconds-since-the-epoch
   date_nanos : 精确到nanos,是对date的补充 

问 :date 如何使用?
答 :

# date
# 配置项 :
#   1. boost            : 默认1.0
#   2. doc_values       : 默认true
#   3. format           : 可以自定义,默认strict_date_optional_time||epoch_millis
#   4. locale           : 区域,默认ROOT locale
#   5. ignore_malformed : 忽略不规范内容,默认false
#   6. index            : 默认true
#   7. null_value       : 空值填充,默认null
#   8. store            : 默认false
#   9. meta             : 元数据

PUT /date_test
{
  "mappings" : {
    "properties" : {
      "my_date" : {"type" : "date"}
    }
  }
}

GET /date_test/_mapping/field/my_date

POST /date_test/_doc
{
  "my_date" : "1989-01-10"
}

POST /date_test/_doc
{
  "my_date" : "1989-01-10T11:40:00Z"
}

POST /date_test/_doc
{
  "my_date" : 1420070400001
}

GET /date_test/_search
{
  "sort" : {"my_date" : "desc"}
}

# 结果
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "date_test",
        "_type" : "_doc",
        "_id" : "2muj0XcBnJvha9PMBYzv",
        "_score" : null,
        "_source" : {
          "my_date" : 1420070400001
        },
        "sort" : [
          1420070400001
        ]
      },
      {
        "_index" : "date_test",
        "_type" : "_doc",
        "_id" : "1Guh0XcBnJvha9PMc4wj",
        "_score" : null,
        "_source" : {
          "my_date" : "1989-01-10T11:40:00Z"
        },
        "sort" : [
          600435600000
        ]
      },
      {
        "_index" : "date_test",
        "_type" : "_doc",
        "_id" : "zGue0XcBnJvha9PMjIww",
        "_score" : null,
        "_source" : {
          "my_date" : "1989-01-10"
        },
        "sort" : [
          600393600000
        ]
      }
    ]
  }
}
# date_nanos

PUT /date_nanos_test
{
  "mappings" : {
    "properties" : {
      "my_date_nanos" : {"type" : "date_nanos"}
    }
  }
}

GET /date_nanos_test/_mapping/field/my_date_nanos

POST /date_nanos_test/_doc
{
  "my_date_nanos" : "1989-01-10"
}

POST /date_nanos_test/_doc
{
  "my_date_nanos" : "1989-01-10T11:40:00.12345678Z"
}

POST /date_nanos_test/_doc
{
  "my_date_nanos" : 1420070400
}

GET /date_nanos_test/_search

# 结果
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "date_nanos_test",
        "_type" : "_doc",
        "_id" : "22uq0XcBnJvha9PMTYyG",
        "_score" : 1.0,
        "_source" : {
          "my_date_nanos" : "1989-01-10"
        }
      },
      {
        "_index" : "date_nanos_test",
        "_type" : "_doc",
        "_id" : "3Gur0XcBnJvha9PMN4yc",
        "_score" : 1.0,
        "_source" : {
          "my_date_nanos" : "1989-01-10T11:40:00.12345678Z"
        }
      },
      {
        "_index" : "date_nanos_test",
        "_type" : "_doc",
        "_id" : "3Wur0XcBnJvha9PMxowe",
        "_score" : 1.0,
        "_source" : {
          "my_date_nanos" : 1420070400
        }
      }
    ]
  }
}


# 取纳秒值
GET /date_nanos_test/_search
{
  "script_fields" : {
    "my_nanos" : {
      "script" : {
        "lang" : "painless",
        "source" : "doc['my_date_nanos'].value.nano"
      }
    }
  }
}

# 结果
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "date_nanos_test",
        "_type" : "_doc",
        "_id" : "22uq0XcBnJvha9PMTYyG",
        "_score" : 1.0,
        "fields" : {
          "my_nanos" : [
            0
          ]
        }
      },
      {
        "_index" : "date_nanos_test",
        "_type" : "_doc",
        "_id" : "3Gur0XcBnJvha9PMN4yc",
        "_score" : 1.0,
        "fields" : {
          "my_nanos" : [
            123456780
          ]
        }
      },
      {
        "_index" : "date_nanos_test",
        "_type" : "_doc",
        "_id" : "3Wur0XcBnJvha9PMxowe",
        "_score" : 1.0,
        "fields" : {
          "my_nanos" : [
            400000000
          ]
        }
      }
    ]
  }
}


# 取格式化
GET /date_nanos_test/_search
{
  "docvalue_fields": [
    {
      "field"  : "my_date_nanos",
      "format" : "strict_date_time"
    }
  ]
}

# 结果
{
  "took" : 10,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "date_nanos_test",
        "_type" : "_doc",
        "_id" : "22uq0XcBnJvha9PMTYyG",
        "_score" : 1.0,
        "_source" : {
          "my_date_nanos" : "1989-01-10"
        },
        "fields" : {
          "my_date_nanos" : [
            "1989-01-10T00:00:00.000Z"
          ]
        }
      },
      {
        "_index" : "date_nanos_test",
        "_type" : "_doc",
        "_id" : "3Gur0XcBnJvha9PMN4yc",
        "_score" : 1.0,
        "_source" : {
          "my_date_nanos" : "1989-01-10T11:40:00.12345678Z"
        },
        "fields" : {
          "my_date_nanos" : [
            "1989-01-10T11:40:00.12345678Z"
          ]
        }
      },
      {
        "_index" : "date_nanos_test",
        "_type" : "_doc",
        "_id" : "3Wur0XcBnJvha9PMxowe",
        "_score" : 1.0,
        "_source" : {
          "my_date_nanos" : 1420070400
        },
        "fields" : {
          "my_date_nanos" : [
            "1970-01-17T10:27:50.400Z"
          ]
        }
      }
    ]
  }
}