【发布时间】:2016-12-12 19:17:47
【问题描述】:
我有一个类型 PurchaseOrder,它可以有 0 个或多个 VendorStatuses。我想创建一个过滤器,可以找到具有 no VendorStatuses 的 PurchaseOrders。我该怎么做?
我尝试过的事情:
Filter &= Filter<PurchaseOrder>.HasChild<PoVendorStatus>(c => c
.MaxChildren(0)); //40 results
Filter &= Filter<PurchaseOrder>.HasChild<PoVendorStatus>(c => c
.MaxChildren(0)
.Query(x => x.MatchAll())); // 0 results
Filter &= Filter<PurchaseOrder>.Missing(y => y.VendorStatuses); // 40 results
Filter &= Filter<PurchaseOrder>.Exists(y => y.VendorStatuses); // 0 results
Filter &= Filter<PurchaseOrder>.Nested(nfd => nfd.Path(x => x.VendorStatuses.First())
.Filter(f2 => f2.Missing(y => y.Id)));
//9 results! But these are the ones that *have* statuses, I need the opposite
Filter &= Filter<PurchaseOrder>.Nested(nfd => nfd.Path(x => x.VendorStatuses.First())
.Filter(f2 => f2.Exists(y => y.Id)));
//0 results >:(
Filter &= Filter<PurchaseOrder>.Nested(nfd => nfd.Path(x => x.VendorStatuses)
.Query(f2 => f2.Terms(t => t.VendorStatuses.First().Id, new[] { (long?)null })));
//40 results
Filter &= Filter<PurchaseOrder>.Nested(nfd => nfd.Path(x => x.VendorStatuses)
.Query(f2 => f2.Term(t => t.VendorStatuses.First().Id, null)));
//40 results
索引中有 40 条记录,我知道至少有一条没有供应商状态,但这些查询要么全部返回,要么不返回。我该如何实现?
我们使用的是 Nest 1.7.2 和 Elasticsearch 版本 1.4.5
【问题讨论】:
标签: c# elasticsearch nest