【发布时间】:2015-08-06 14:12:40
【问题描述】:
我有一个 ElasticSearch 数据库,其中包含一些文档。每个文档都有自己的时间戳字段。
我目前有一个需要两个时间戳的 WebApi,startTime 和 endTime。 WebApi 只是在 ES 上执行查询以获取时间戳在给定范围内的文档。
这是我当前的查询:
var readRecords = ElasticClient.Search<SegmentRecord>(s => s
.Index(ElasticIndexName)
.Filter(f =>
f.Range(i =>
i.OnField(a => a.DateTime).GreaterOrEquals(startTime).LowerOrEquals(endTime))).Size(MaximumNumberOfReturnedDocs).SortAscending(p => p.DateTime)).Documents;
很简单,基本上就是基于startTime和endTime参数的范围查询。它有效。 :-)
现在的问题是:我什至需要检索时间戳低于startTime 的最新文档。
所以基本上最终的查询应该是:
- [
startTime,endTime]范围内的所有文档
与
- 具有时间戳startTime的最新时间文档
第一部分显然可以返回任意数量的记录,零,一个或多个
第二部分应该只返回一个文档,(如果在starTime 之前不存在任何文档,则返回零)
【问题讨论】:
-
我认为您要么需要两个查询,要么保留当前查询的 0 个或多个文档列表,并添加一个聚合部分,您可以在其中获得“及时的最新文档”。然后,在尝试了解您返回的内容时,您需要查看
hits部分和aggs部分。 -
谢谢!拜托,你能详细说明你的答案吗?
标签: c# elasticsearch asp.net-web-api web-applications nosql