Elasticsearch에서 yyyy/MM/dd HH:mm:ss 문자를 날짜 형식으로 구문 분석하고 싶습니다.

어려움



"yyyy/MM/dd HH: mm:ss"형식의 문자를 인덱스 템플릿에서 Date로 구문 분석하면 오류가 발생했습니다.

※ HH : mm 사이에 반각은 말해서 죄송합니다 · 이모티콘이되는 것으로

【인덱스 템플릿】
PUT _template/template_1
{
  "index_patterns": ["te*", "bar*"],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "_doc": {
      "properties": {
        "sysdate": {
          "type": "date"
        }
      }
    }
  }
}

【인덱스 등록】
PUT test_index/_doc/1
{
  "sysdate":"2019/01/21 23:00"
}

【오류】
"reason": "Invalid format: \"2019/01/21 23:00\" is malformed at \"/01/21 23:00\""

인덱스 템플릿에 format을 추가하면 좋을까
Elasticsearch Reference [6.5] format
        "sysdate": {
          "type": "date",
          "format": "yyyy/MM/dd HH:mm:ss"
        }

오류 상황은 변경되지 않았습니다. 아래 형식을 변경해도 변경되지 않았습니다.
"format": "yyyy/MM/dd' 'HH:mm:ss"
"format": "yyyy/MM/ddTHH:mm:ss"

아래의 자료나 Elasticsearch의 format을 읽었더니 「YYYY/MM/DD」의 형태 밖에 대응하고 있지・・・

Elasticsearch 선배로 날짜를 터치하고 싶습니다.

대응 방법



아래와 같은 고민을 품고 있는 기사를 발견했다

Failed to parse date field yyyy/MM/dd HH: mm:ss SOLVED

절차는 다음과 같습니다.
① ingest, pipeline, gsub를 사용하여 "/"⇨ "-", "반각 공간"⇨ "T"로 변환
「yyyy/MM/ddTHH: mm:ss」→「yyyy-MM-ddTHH: mm:ss」
Gsub Processor
②format에 「date_time_no_millis」를 사용해 퍼스한다

【ingest·pipeline·gsub】
gsub 를 복수 기재하려면 하기를 참고로 했다
Elastic Ingest with multiple grok processors
PUT _ingest/pipeline/test_pipeline
{
  "description" : "test pipeline",
  "processors" : [
    {
      "gsub" : {
        "field": "sysdate",
        "pattern": "/",
        "replacement": "-",
        "ignore_missing":true
      }
    },
    {
      "gsub" : {
        "field": "sysdate",
        "pattern": " ",
        "replacement": "T",
        "ignore_missing":true
      }
    }
  ]
}

【인덱스 템플릿】
PUT _template/template_1
{
  "index_patterns": ["te*", "bar*"],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "_doc": {
      "properties": {
        "sysdate": {
          "type": "date",
          "format": "date_time_no_millis"
        }
      }
    }
  }
}

【인덱스 등록】
"?pipeline="에서 pipeline 설정
PUT test_index/_doc/1?pipeline=test_pipeline
{
  "sysdate":"2019/01/21 23:00"
}

【결과】
잘 갔다! !
{
  "_index" : "test_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

끝에



gsub는 if를 사용할 수 있습니다.
Conditional Execution in Pipelines

gsub는 pattern.matcher하고 replaceAll합니까?
G스 bP 여과접촉 r. 자바

좋은 웹페이지 즐겨찾기