ElasticSearch/kibana在控制台上发布数据,并将时间戳设置为现在、现在+1m等,而不使用管道

kqqjbcuj  于 2023-03-11  发布在  Kibana
关注(0)|答案(1)|浏览(222)

我在elasticsearch中向索引添加一些测试数据,有没有什么方法可以直接将时间戳字段设置为“NOW“,并进行一些简单的计算。
我在其他上下文中可以使用类似{{_ingest.timestamp}}的内容,但以下内容不起作用
发布我的索引/_doc {"@时间戳”:“{{摄取时间戳}}"}
此外,“现在”在发布my-index/_doc {"@timestamp”:“现在”}后不起作用
理想情况下,希望使用post my-index/_doc {"@timestamp”:“now”}之类的命令快速添加文档
发布我的索引/_doc {"@timestamp”:“现在+1m”}
发布我的索引/_doc {"@timestamp”:“现在+2m”}
是否可以在不使用摄取管道的情况下完成此操作?

dojqjjoe

dojqjjoe1#

摄取管道非常方便,因为它们允许您修改源文档的内容,方法是添加一个带有动态值(如{{_ingest.timestamp}})的新@timestamp字段。
但是,如果您不想使用摄取管道,还有另一种方法可以使用runtime fields和Map脚本。
在Map中,需要使用一个脚本定义@timestamp日期字段,该脚本将在文档被索引时计算字段的值:

PUT test-date
{
  "mappings": {
    "properties": {
      "@timestamp": {
        "type": "date" ,
        "script": "emit(new Date().getTime())"
      }
    }
  }
}

注意,在脚本中,您可以自由地应用任何逻辑来存储now+1now+2
然后,您可以像往常一样为文档编制索引,但不必指定@timestamp字段:

POST test-date/_doc
{
  "field": "test"
}

在运行搜索时,可以检索动态创建的@timestamp字段的值,如下所示:

POST test-date/_search
{
  "_source": ["field"],
  "fields": ["@timestamp"]
}

=>

  {
    "_index" : "test-date",
    "_source" : {
      "field" : "test"
    },
    "fields" : {
      "@timestamp" : [
        "2023-03-08T14:49:50.459Z"
      ]
    }
  }

这里最大的区别是运行时字段是动态创建和索引的,并存储为一个单独的字段,但是**您的源文档不会像摄取管道那样被修改。

相关问题