【问题标题】:Filtering out rows with children in Elasticsearch Nest在 Elasticsearch Nest 中过滤出带有子项的行
【发布时间】:2016-12-12 19:17:47
【问题描述】:

我有一个类型 PurchaseOrder,它可以有 0 个或多个 VendorStatuses。我想创建一个过滤器,可以找到具有 no VendorStatusesPurchaseOrders。我该怎么做?

我尝试过的事情:

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


    【解决方案1】:

    一位同事找到了一种方法来做到这一点。我们发现,如果我们否定返回所有具有状态的记录的过滤器,它就起作用了。我没有意识到你可以简单地否定这样的过滤器。

    Filter &= !Filter<PurchaseOrder>.Nested(nfd => nfd.Path(x => x.VendorStatuses.First())
         .Filter(f2 => f2.Missing(y => y.Id))); 
    

    【讨论】:

    • NEST 在FilterContainerQueryContainer 上重载了&amp;|! 运算符,以使查询和过滤器的连接、析取和否定更容易。在 2.x 中,+ 一元运算符也被重载以将查询包装在 bool 查询 filter 子句中。
    • 我知道他们重载了 &amp;| 但我看不到 ! 被覆盖了,所以我没有尝试过
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多