SearchRequest searchRequest = Requests.searchRequest(indexName);
SearchSourceBuilder builder = new SearchSourceBuilder();
Gson gson = new Gson();
QueryBuilder querybuilder = QueryBuilders.wrapperQuery(query);
query : {
"range": {
"timecolumn": {
"gte":"2022-10-07T09:45:13Z",
"lte":"2022-10-07T09:50:50Z"
}
}
}
在傳遞上述查詢時,我得到了 Parser Exception,我無法更改日期格式,因為 DB 中的資料以相同的格式插入。
需要咨詢:
- 如果沒有,我們如何在 ElasticSearch Java 中決議這種時間戳
- 我們如何在資料插入期間控制模式更新,例如我的列定義為文本,將日期格式“2022-10-07T09:45:13Z”作為文本。
要么我必須在 ES Parser 中傳遞這種格式,要么我必須在插入程序中將格式更改為 2022-10-07 09:45:13 。
插入后我無法轉換每一行,因為我們有大量資料
uj5u.com熱心網友回復:
正如您所提到的,Elasticsearch 存盤timecolumn為text型別,因此我建議將映射更改timecolumn為date型別,您將能夠使用日期范圍查詢。因為如果您將日期存盤為文本并應用范圍,那么它將不會回傳預期的結果。
{
"mappings": {
"properties": {
"timecolumn": {
"type": "date"
}
}
}
}
現在談到您的 Java 代碼問題,您可以在使用 Java 客戶端時使用以下代碼在 Java 中創建范圍查詢。
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
QueryBuilder query = QueryBuilders.rangeQuery("timecolumn").gte("2022-10-07T09:45:13Z").lte("2022-10-07T09:50:50Z");
searchSourceBuilder.query(query);
searchRequest.source(searchSourceBuilder);
關于您對重新索引資料的擔憂:
插入后我無法轉換每一行,因為我們有大量資料
您可以使用Reindex API將資料從原始索引移動到臨時索引并洗掉您的原始索引。然后,使用適當的映射定義索引,并再次使用相同的 Reindex API 將資料從臨時索引復制到具有新映射的原始索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/523564.html
上一篇:多重搜索和過濾資料回傳nestjsmongodb中每個過濾器的計數
下一篇:如果型別存在,彈性搜索必須匹配
