Elasticsearch客户端NEST不存储时间戳

时间:2014-08-21 01:27:51

标签: elasticsearch nest

我正在尝试使用NEST创建一个Elasticsearch索引并索引文档。

我通过Marvel Sense仪表板查询结果,可以看到索引已经创建,并且可以看到我的文档也已创建,但文档上没有_timestamp字段。

当我尝试通过我的Kibana仪表板查看索引和文档时,它有一个问题,因为它无法找到与过滤器一起使用的时间戳。

我创建索引如下:

var createIndexResult = _elasticClient.CreateIndex(errorIndex, c => c
                .NumberOfReplicas(0)
                .NumberOfShards(1)
                .Settings(s => s
                    .Add("merge.policy.merge_factor", "10")
                    .Add("search.slowlog.threshold.fetch.warn", "1s"))
                .AddMapping<ElmahErrorDocument>(m => m
                    .TimestampField(f => f
                        .Enabled()
                    )

                )
            );

我正在为我的文档编制索引如下:

var indexResponse = _elasticClient.Index(errorDocument, i => i
                                .Timestamp(timestamp.ToString("o"))
                                .Type("elmah")
                                .Id(errorDocument.Id)
                            );

但由于某种原因,当我查询结果时,我看不到_timestamp字段。

使用NEST索引文档时如何获取存储的时间戳?

1 个答案:

答案 0 :(得分:0)

您无法在查询中获取_timestampfield。也许你试试这个

elasticClient.CreateIndex("YourIndexName", c => c.AddMapping<yourClass>(m => m                    
                .MapFromAttributes()
                .TimestampField(t => t
                .Enabled(true)
                .Path(o => o.time)                                   
                )
             )
          );

它将使用您的文档属性(在我的cas time中,格式为DateTime)作为_timestamp值。

您可以通过

进行检查
 curl -X GET 'http://someip:9200/yourIndex/_mapping?pretty=true'

它应输出类似这样的东西

{
"yourIndex" : {
"mappings" : {
  "index" : {
    "_timestamp" : {
      "enabled" : true,
      "path" : "time"
    },
    "properties" : {          
      "time" : {
        "type" : "date",
        "format" : "dateOptionalTime"
      },          
    }
  }
}    

在Kibana中,您必须使用time属性作为时间戳。