我正在尝试使用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索引文档时如何获取存储的时间戳?
答案 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
属性作为时间戳。