我一直在阅读Point in time API并希望在我的.net 应用程序中使用 NEST 来实现它。但是,在阅读那篇文章(.net 应用程序超链接)时,我看到了 Fluent DSL 示例,如下所示。有没有一种方法可以找到该 ID,而无需在控制台上访问 kibana 并进行查询搜索以获取该 ID,然后将该 ID 放入“a-point-in-time-id”中?或者“a-point-in-time-id”是否会为您做到这一点,就像映射到 ID 一样?
s => s
.PointInTime("a-point-in-time-id", p => p
.KeepAlive("1m"))
如果你这样做,我知道在 kibana cli 控制台中:
POST /app-logs*/_pit?keep_alive=5m它会给你一个 PIT(时间点)id。你如何在 NEST 中检索它?
并在阅读search_after并尝试使用 Fluent DSL Example 为 .net 客户端使用后的搜索来实现它时。我注意到他们有“项目”这个词,但它没有说“项目在示例中是什么。那到底是什么?
s => s
.Sort(srt => srt
.Descending(p => p.NumberOfCommits)
.Descending(p => p.Name)
)
.SearchAfter(
Project.First.NumberOfCommits,
Project.First.Name
)
在这里,我尝试实施.PointInTime(),但被卡住了。.Sort().SearchAfter()
var response = await _elasticClient.SearchAsync<Source>(s => s
.Size(3000) // must see about this
.Source(src => src.Includes(i => i
.Fields(f => f.timestamp,
fields => fields.messageTemplate,
fields => fields.message)))
.Index("app-logs*"
.Query(q => +q
.DateRange(dr => dr
.Field("@timestamp")
.GreaterThanOrEquals("2021-06-12T16:39:32.727-05:00")
.LessThanOrEquals(DateTime.Now))))
.PointInTime("", p => p
.KeepAlive("5m"))
.Sort(srt => srt
.Ascending(p => p.timestamp))
.SearchAfter()
我知道当您使用 PIT ID 时,您不需要在搜索中使用索引,但在超链接示例中,它没有显示您将如何实现它。所以只是有点迷失了如何做到这一点。任何指针/指导/教程都会很棒!
但只是想看看我如何在 NEST 中做到这一点,但如果你说它是 XPACK 的一部分,我会理解的。