【问题标题】:How to query Elasticseach using DateRange on a nested array?如何在嵌套数组上使用日期范围查询 Elasticsearch?
【发布时间】:2020-09-28 18:31:48
【问题描述】:
所以基本上这就是代码
var filter = new QueryContainerDescriptor<GrossReservationVersion2>()
.DateRange(range => range
.GreaterThanOrEquals(start)
.LessThanOrEquals(end)
.Field(f => f.BookingItems.First().Start)
);
现在,BookingItems 是一个嵌套数组,每个项目都有一个开始日期。我想在嵌套数组对象中的日期上使用 DateRange 进行过滤。显然这段代码不会产生任何结果。任何机构都知道如何做到这一点?谢谢你
【问题讨论】:
标签:
c#
.net
database
elasticsearch
【解决方案1】:
所以这就是我所做的......它应该可以工作。您需要向下嵌套级别,然后聚合并使用 DateRange。编写 DateRange 后,您可以使用 resversnested 聚合根文档。
.Aggregations(a0 => a0
.Nested("nested", n => n
.Path(p => p.BookingItems)
.Aggregations(a1 => a1
.Filter("arrival", f => f
.Filter(af => af
.DateRange(range => range
.Field(df => df.BookingItems.Min(d => d.Start))
.GreaterThanOrEquals(start)
.LessThanOrEquals(end)))
.Aggregations(a2 => a2
.ReverseNested("reverseNested", rn => rn
.Aggregations(a4 => a4
.Sum("worthAccumalative", s => s.Field(f3 => f3.worth))
)
)
.TopHits("tHits", th => th
.Size(10))
)
)
)
)
)
如您所见,您可以使用 TopHits 来确认您的过滤以及您获得了正确的文档。