【问题标题】:ElasticSearch Filters Aggregation using DateRange FilterElasticSearch 使用 DateRange 过滤器过滤聚合
【发布时间】:2019-11-17 06:44:11
【问题描述】:

我一直在使用 ElasticSearch 中的过滤器聚合,它允许我指定独立的过滤器,每个过滤器为提供的每个过滤器提供单独的计数。

我无法让 DataRangeQuery 作为过滤器运行。如果我添加 DateRangeQuery 作为过滤器,Elastic 会给我以下错误。有谁知道将日期范围查询作为过滤器放入过滤器聚合的方法?

“search_phase_execution_exception”

以下是我从业务角度尝试做的示例用例。

内容类型:任务

截止日期方面

  • 今天到期,减去 7 天
  • 本周到期
  • 下周到期

我在下面提供了相关 NEST/.Net Elastic 代码的代码 sn-p。

aggs.Add(facet.Name, new FiltersAggregation(Constants.CONST_FACETNAME_DUEDATE)
{
OtherBucket = false,
Filters = new NamedFiltersContainer
{
 { Constants.CONST_TODAYMINUS7, BuildTodayMinus7Days(DateTime.Now.AddDays(-7).ToString(), "endDate") && filter },
 { Constants.CONST_TODAY, BuildTodayQuery()},
 { Constants.CONST_THISWEEK, BuildThisWeekQuery()},
 { Constants.CONST_NEXTWEEK, BuildNextWeekQuery()},
 { Constants.CONST_NEXT30DAYS, BuildNext30DaysQuery()},
 { Constants.CONST_LASWEEK, BuildLastWeekQuery()},
 { Constants.CONST_NO_DUE_DATE, BuildNoDueDateQuery()}
}
});
....
private DateRangeQuery BuildTodayMinus7Days(string date, string field)
{
  var qDateRange = new DateRangeQuery
  {
    Field = field,
    GreaterThanOrEqualTo = date,
  };
  return qDateRange;
}

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我知道为什么这不起作用。我在 Kibana 中运行了查询并得到了这个更有帮助的错误:

    “原因”:“无法解析日期字段 [11/09/2019 16:06:15],格式为 [strict_date_optional_time||epoch_millis]”

    因此,FiltersAggregation 中似乎允许使用 DateRangeQuery。我的问题是我传入的日期格式不正确,并且错误具有误导性。

    我通过将传递到 DateRangeQuery 的日期格式化如下:

    'BuildTodayMinus7Days(DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd"), "endDate")'

    【讨论】:

      猜你喜欢
      • 2015-09-17
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 2016-12-04
      • 2015-12-30
      • 2018-01-30
      • 2014-12-31
      相关资源
      最近更新 更多