通过NodeJS客户端创建时间戳

时间:2018-01-31 11:57:35

标签: node.js elasticsearch

我正在尝试做一些事情,这应该相当容易。但无法实现。长话短说我使用ELK,Logstash正在为我插入所有文档,并使用适当的过滤器。

现在我需要手动(通过NodeJS)向ES插入数据,我的日期类型有小问题。理想情况下,我想发送时间戳字段,其中包含我的NodeJS应用程序生成的日期,并完成它。 Logstash以同样的方式进行输入。我很乐意避免在索引上设置映射。即使没有索引,我确信Logstash即时生成一个。它就是一个。

好吧,如果我必须设置自己的映射,那么我该怎么做呢?

这是我到目前为止所尝试的: 使用ElasticSearch for NodeJS

代码:

saveIndex (lt, gte, indexName) {
        //lt --> 2018-01-31T12:52:05+01:00
        return client.index({
            'index': 'healthcheck',
            'type': 'string',
            'timestamp': lt,
            'body': {
                'message': 'Message in a bottle',
                'anothertest': 'this is just a test'
            }
        });
    }

当我运行该代码时,我的索引与正文字段一起创建。按预期工作,但我没有时间戳值。我预计它会自动创建。阅读后,我看到我需要创建一个带字段的映射 - >日期。我这样做了:

PUT healthcheck
{
  "mappings": {
    "my_type": {
      "properties": {
        "timestamp": {
          "type":   "date",
          "format": "yyyy-MM-dd"
        }
      }
    }
  }
}

我在Kibana中运行后,我看到我有时间戳字段,但它说它不是可搜索的。我删除了索引。运行映射语句。然后我运行代码来生成一些文档,但仍然没有。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为您需要编写映射,以便将字段编入索引。

  

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-index.html

(它说真的是默认值,但它也说如果它不是不可搜索的,那么这是我最好的猜测)
或者,您可以尝试快速解决方案(不是保证修复),在Kibana中转到管理/索引模式/您的索引模式,并在右上角点击刷新按钮。那应该为你索引。