首页 > 解决方案 > 嵌套列表日期过滤器

问题描述

在我的索引中,我有类型为吸引力的文件,它们有一个属性,即报价列表。这些优惠有一个到期日。每个景点可以有多个优惠(优惠属性是优惠列表)。

我要做的是过滤掉所有附加了过期优惠的所有附件。

我已经做到了这一点:

private QueryContainer AddExpiredOffersFilter(QueryContainerDescriptor<AttractionDocument> query)
{
    query.DateRange(d => d.Field(f => f.Offers.First().Expires).GreaterThan(DateTime.Now));
    return query;
}

但是,这仅适用于第一个附加报价。我将如何过滤所有附加的报价?

标签: c#elasticsearchnest

解决方案


您可以在数组上使用 Max 并将其与 Datetime.now 进行比较。

重要提示:请注意 .First() 不仅仅意味着第一个项目(而且弹性不会在 indexaction 中保持项目顺序)。分析整个数组(但实际上,.Field 运算符是一个或,因此不适用于您的情况,可以使用 must_not bool 父子句顺便说一句)。

   private QueryContainer AddExpiredOffersFilter(QueryContainerDescriptor<AttractionDocument> query)
    {
        query.DateRange(d => d.Field(f => f.Offers.Max(r => r.Expires)).GreaterThan(DateTime.Now));
        return query;
    }

推荐阅读