C# 如何为弹性条件源描述符创建嵌套
在我的索引中,我有吸引类型的文档,它们有一个属性,即报价列表。这些优惠有有效期。每个景点可以有一个以上的优惠。一个景点可能有一个过期优惠和一个未过期优惠。我想做的是当我查询并返回结果时,不要在景点中显示任何过期的优惠。我的源描述符如下所示:C# 如何为弹性条件源描述符创建嵌套,c#,
elasticsearch,nest,C#,
elasticsearch,Nest,在我的索引中,我有吸引类型的文档,它们有一个属性,即报价列表。这些优惠有有效期。每个景点可以有一个以上的优惠。一个景点可能有一个过期优惠和一个未过期优惠。我想做的是当我查询并返回结果时,不要在景点中显示任何过期的优惠。我的源描述符如下所示: .Source(src => src.IncludeAll().Excludes(f => f.Fields(d => d.Offers.Where(df => df.Expires > DateTime.Now))) 在生成
.Source(src => src.IncludeAll().Excludes(f => f.Fields(d => d.Offers.Where(df => df.Expires > DateTime.Now)))
在生成的查询部分中,我可以看到以下内容:
{ "includes": [ "*" ], "excludes": [ "offers.now.expires"] }
我仍然可以看到某个景点的过期优惠,该景点的优惠已过期且未过期。甚至可以有条件地过滤源描述符中的字段吗
我还尝试:
.Source(src => src.IncludeAll().Excludes(f => f.Fields(d => d.Offers.First().Expires > DateTime.Now))
输出相同,结果相同,我在返回的吸引力文档中仍然收到过期的优惠Elasticsearch无法对源进行条件筛选。由于linq的原因,我认为Nest允许在代码中使用它,但这不起作用。您必须在客户端进行筛选。使用类型系统,
.Field()
中的lambda表达式只能解析为字符串字段名。