当前位置: 首页 > 知识库问答 >
问题:

在更新查询elasticsearch中获取日期值

刁茂才
2023-03-14

我试图得到两个日期的millis值并将它们减去另一个。当我使用ctx._sourse.begin_time.toInstant(). toEpochMilli()像doc['begin_time']。value.toInstant(). toEpochMilli()它给我运行时错误。和ctx。_source.begin_time.date.getYear()(像这样使用现有列值更新弹性搜索的所有文档)给我运行时错误

  "ctx._source.work_time = ctx._source.begin_time.date.getYear()",
  "                                              ^---- HERE"

< code>ctx的类型。_source如果此代码工作正常< code > doc[' begin _ time ']. value . to instant()。toEpochMilli()。我在无痛的文档中找不到如何正确地获取值。开始时间是100%日期。

那么,我如何编写一个脚本来获取两个日期之间的差异并将其写入另一个整数?

共有1个答案

吴安和
2023-03-14

仔细看,链接问题中的脚本语言在<code>groovy<code>中,但它不再受支持。我们现在(2021)使用的是无痛的。

这里的要点是ctx._source属性是原始的JSON——这意味着日期将是字符串或整数(取决于格式),而不是java.util.Date或您可以调用. getDate()的任何其他数据类型。这意味着我们必须首先解析该值。

因此,假设您的begin_time格式为yyyy/MM/dd,您可以执行以下操作:

json prettyprint-override">POST myindex/_update_by_query
{
  "query": {
    "match_all": {}
  },
  "script": {
    "source": """
      DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
      LocalDate begin_date = LocalDate.parse(ctx._source.begin_time, dtf);
      
      ctx._source.work_time = begin_date.getYear()
    """
  }
}

顺便说一句,_update_by_query脚本上下文(什么是可访问的,什么是不可访问的)记录在这里,并且在这里很好地记录了在无痛中处理datetime。

 类似资料:
  • 我知道我可以通过http://localhost:9200/[index_name]/[index_type]/[_id]更新特定的文档,但是我的文档中的_id有#个符号,Sense找不到它们。 了解查询DSL将能够执行一个搜索,我能够指出_id不在URL中。资源:https://www.elastic.co/guide/en/elasticsearch/reference/current/que

  • 问题内容: 我目前正在使用Elasticsearch V2.3.1。我想在Java中使用以下Elasticsearch查询。 上面的查询搜索名为“ kimchy”的“用户”,并使用给定值更新“列表”字段。该查询同时更新多个文档。我在https://www.elastic.co/guide/en/elasticsearch/client/java- api/2.3/java-docs- update

  • 问题内容: 我将Java 8与Spring’s 和Oracle 12.1结合使用, 我想更新记录并获取更新的确切时间记录 当前它返回(int)受影响的行数,但是我想要确切的更新日期 我是否必须发送新请求以获取可能不正确的当前时间? 更确切的是将更新日期保存在列中,然后执行另一个SQL 是否有另一个选项可在一个查询中获取更新日期? 显然,我也不想使用从代码获取日期(如),因为服务器时间与数据库时间不

  • 问题内容: 我当前正在使用Elasticsearch V2.3.1。我想在Java中使用以下Elasticsearch查询。 上面的查询搜索名为“ kimchy”的“用户”,并使用给定值更新“列表”字段。该查询同时更新多个文档。我在https://www.elastic.co/guide/en/elasticsearch/client/java- api/2.3/java-docs- update

  • 你好,我有两列日期时间的多行,我想获取所有记录的两列之间的最新日期(最高)的行。请查看以下内容: 我想从两列(Date1和Date2)的所有记录中获取最高日期。从上表中,我想要第三行日期,因为这是两列所有记录中的最高日期(2021-06-16 20:04:24)。如果我们在2021-06-16 09:20:41之前更改date1列第3行,那么结果将是第2行,因为在date2中找到了最高日期记录。请

  • 问题内容: 如果我有一个表列,,, 并且我想运行一个sql查询以获取数据集中最早的记录。 您可以在查询中执行此操作,还是需要在事实之后循环? 我想获取该记录的所有字段。 问题答案: 如果您只想要日期: 如果您需要所有信息: 尽可能避免循环。循环通常会导致游标,游标几乎从来没有必要,而且常常效率很低。