无法解析ElasticSearch Java实现中的2022-10- 04 T19:24:50 Z格式

ewm0tg9j  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(192)

第一个
在传递上述查询时,我遇到了解析器异常,我无法更改日期格式,因为数据库中的数据以相同的格式插入。
需要以下方面的建议:
1.如果不能,我们如何在ElasticSearchJava中解析这种时间戳
1.我们如何在数据插入期间控制模式更新,就像我在定义为文本中的列,它将日期格式“2022-10- 07 T09:45:13 Z”作为文本。
要么我必须在ES解析器中传递此格式,要么我必须在插入过程中将格式更改为2022-10-07 09:45:13。
我无法在插入后为每行进行转换,因为我们有大量数据

lsmd5eda

lsmd5eda1#

正如你所提到的,Elasticsearch将timecolumn存储为text类型,因此我建议将timecolumn的Map更改为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将数据从原始索引移动到临时索引并删除原始索引。然后,使用正确的Map定义索引,并再次使用相同的Reindex API将数据从临时索引复制到具有新Map的原始索引。

相关问题