我想在日期字段上使用ElasticSearch聚合,其中每个“bucket”都是该日期的值。
我从以下内容开始:
"aggs" : {
"auctions" : {
"date_histogram" : {
"field" : "auctionOn",
"interval" : "day"
}
}
}
但是它返回的桶太多了。我只想要接下来7天的桶。
我还有一堆其他聚合,所以过滤器只需要应用于这个聚合。
有什么想法吗?
我也在使用NEST客户端。NET,所以如果你能帮我弄清楚如何使用NEST客户端,那就太好了(但我应该能够弄清楚,一旦我有ES查询要使用)
谢谢
执行此操作的方法是在日期字段上应用range
查询,该查询将在计算聚合之前应用。
但是,由于听起来像是在一个请求中执行多个聚合,并且此日期范围应仅应用于一个聚合,因此可以执行msearch或多重搜索以在一个请求中检索多个结果。这就是Kibana用来检索仪表板中多个可视化结果的例子。
像这样的东西
public class MyDocument
{
public string Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime AuctionOn { get; set; }
}
var client = new ElasticClient();
var multiSearchResponse = client.MultiSearch(ms => ms
.Search<MyDocument>("main_aggs", s => s
.Aggregations(a => a
.Terms("titles", t => t
.Field(f => f.Title)
)
.Terms("content", t => t
.Field(f => f.Content)
)
)
)
.Search<MyDocument>("date_agg", s => s
.Query(q => q
.DateRange(dr => dr
.Field(f => f.AuctionOn)
.GreaterThanOrEquals(DateMath.Now)
.LessThan(DateMath.Now.Add("7d"))
)
)
.Aggregations(a => a
.DateHistogram("auctions", dh => dh
.Field(f => f.AuctionOn)
.Interval(DateInterval.Day)
)
)
)
);
var mainAggsResponse = multiSearchResponse.GetResponse<MyDocument>("main_aggs");
var dateAggResponse = multiSearchResponse.GetResponse<MyDocument>("date_agg");
您可以在“筛选”聚合中使用“日期直方图”聚合来为特定聚合应用筛选。
因此,聚合如下所示:
{
"aggs": {
"filter_hist": {
"filter": {
"range": {
"auctionOn": {
"gte": "2018-12-01",
"lte": "2018-12-21"
}
}
},
"aggs": {
"hist": {
"date_histogram": {
"field": "auctionOn",
"interval": "1d"
}
}
}
}
}
}
您可以根据需要更改范围
过滤器。
问题内容: 我一直在尝试在Elasticsearch中使用日期直方图聚合,并且它以纪元或yy-mm-dd-mm- ss格式返回日期。但是我想要的是获取每周的文档计数,例如星期一,星期二等。我有什么方法可以做到这一点? 问题答案: 您需要采用其他方法。使用脚本,您可以将日期时间转换为星期几。在此值上,如果您应用术语汇总,它应该可以正常工作。 将日期时间值转换为工作日的脚本 查询以获取值 您还可以在此
我在组合嵌套日期字段、date_histogram聚合和范围查询时遇到了一个问题。 我的整个查询如下所示: 它给出以下响应(仅显示聚合): 正如您所看到的,我仍然获取指定范围之外的日期值。更奇怪的是,如果删除查询部分,将得到以下响应: 正如您所看到的,所有桶(除了与范围对应的桶)的doc_count都增加了,这意味着过滤掉了一些值,但不是全部。我已经检查了映射和类型为“date”,这也通过date
版本 使用Elasticsearch 目的 此查询将返回直方图,但将返回所有文档中所有可用日期的桶。它不限制在特定的日期范围内。 我试过什么? 我尝试了很多方法来解决这个问题,但都失败了。*范围筛选器,然后直方图*日期范围聚合,然后直方图桶*使用with,完整日期,和时间戳*在直方图聚合内尝试范围筛选器 任何指导将不胜感激!谢了。
问题内容: 我想检查两个日期是否超过一周,例如,检查两个日期是否有7天, 此时,数据范围应仅在一周之内(7天)。 我已经尝试过这样的事情, 有人可以帮忙吗? 问题答案: 最简单的方法是使用Jodatime并使用 另一个解决方案是使用日历,添加7天,然后再次进行比较。
问题内容: 我正在尝试Nest插件来查询elasticsearch数据。我有一个基于领域的年度工作计数报告。目前,我为此使用了日期直方图报告,下面是弹性查询。 等效嵌套查询 一切正常,但是现在问题是遍历结果以获取值,对于正常的聚合,我目前正在执行以下操作 但似乎Nest不支持带有日期直方图存储桶的存储桶。 如果我尝试如下所示,我将得到null引用异常。 看来我们必须使用如下所示的方法。d2现在具有
问题内容: 我正在使用PHPMyadmin,并使用PHP将值放入数据库中。我使用时间戳存储产品的到期日期,如下所示,例如: 我要选择所有到期日期等于今天的日期加上8天的日期(例如上面的那一天) 我也想在一个单独的页面中选择所有过期日期等于今天日期+ 2周的内容,如果有人可以帮助我,将不胜感激! 问题答案: 您可以使用以下查询来做到这一点: 您可以使用过去的日期。