日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ES时间查询报错 - “caused_by“:{“type“:“illegal_argument_exception“,“reason“:“failed to parse date field

發布時間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。