ES时间查询报错 - “caused_by“:{“type“:“illegal_argument_exception“,“reason“:“failed to parse date field
生活随笔
收集整理的這篇文章主要介紹了
ES时间查询报错 - “caused_by“:{“type“:“illegal_argument_exception“,“reason“:“failed to parse date field
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
項目場景:
在ES的使用過程中,用到了時間范圍的查詢功能,出現時間解析錯誤的報錯信息:“caused_by”:{“type”:“illegal_argument_exception”,“reason”:"failed to parse date field …
問題描述
查詢query對象部分字段描述
@ApiModelProperty(value = "開始時間")@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")private Date searchStartTime;@ApiModelProperty(value = "結束時間")@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")private Date searchEndTime;查詢時間范圍錯誤java代碼
//時間范圍if (query.getSearchStartTime()!=null && query.getSearchEndTime()!=null){RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("createTime");rangeQuery.from(query.getSearchStartTime());rangeQuery.to(query.getSearchEndTime());//因為filter比query快,也可以將rangeQuery放入sourceBuilderboolQueryBuilder.filter(rangeQuery);}報錯信息
Suppressed: org.elasticsearch.client.ResponseException: method [POST], host [http://192.168.9.194:9200], URI [/upload-file/_search?pre_filter_shard_size=128&typed_keys=true&max_cothrottled=true&search_type=query_then_fetch&batched_reduce_size=512&ccs_minimize_roundtrips=true], status line [HTTP/1.1 400 Bad Request] {"error":{"root_cause": [{"type":"parse_exception", "reason":"failed to parse date field [2022-02-28T16:00:00.000Z] with format [yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:m-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis]]"}], "type":"search_phase_execution_exception", "reason":"all shards failed", "phase":"query", "grouped"e_exception", "reason":"failed to parse date field [2022-02-28T16:00:00.000Z] with format [yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis]: [f/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis]]", "caused_by":{"type":"illegal_argument_exception", "reason":"failed to parse date field [2022-02-28T16:00:00.000Z] with format [yyyy-MM-darse_exception","reason":"Failed to parse with all enclosed parsers"}}}}]},"status":400}原因分析:
es和mysql不同,mysql傳入date后經過解析可以直接作為參數進行sql拼寫,但是es貌似不行,需要轉為時間戳
解決方案:
將時間參數轉為時間戳進行查詢
//時間范圍if (query.getSearchStartTime()!=null && query.getSearchEndTime()!=null){RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("createTime");rangeQuery.from(query.getSearchStartTime().getTime());rangeQuery.to(query.getSearchEndTime().getTime());//因為filter比query快,也可以將rangeQuery放入sourceBuilderboolQueryBuilder.filter(rangeQuery);}建議
我試過localdatetime類型的時間,但是沒有date類型好用
總結
以上是生活随笔為你收集整理的ES时间查询报错 - “caused_by“:{“type“:“illegal_argument_exception“,“reason“:“failed to parse date field的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔记本突然无线和有线都不能使用
- 下一篇: 无线突然断开无法连接服务器,为什么我的无