c# - 在 Elasticsearch Nest 中过滤掉带有子项的行

标签 c# elasticsearch nest

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

我尝试过的事情:

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 版

最佳答案

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

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

关于c# - 在 Elasticsearch Nest 中过滤掉带有子项的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41107974/

相关文章:

c# - Direct Line API - 机器人框架/英雄卡和附件

c# - 在 Telerik RadGrid for Winforms 中选择包括折叠组在内的多行

elasticsearch tf-idf 并忽略搜索中的字段长度范数

elasticsearch - 在ElasticSearch NEST客户端中建立索引时设置一致性级别

c# - 有没有办法在 ASP.NET 中将身份验证从一个 Web 应用程序持久保存到另一个嵌套的 Web 应用程序?

c# - 带有 SerialPort 的 Windows 窗体 - 应用程序在关闭窗体后挂起

elasticsearch - Elasticsearch批量API错误

elasticsearch - 从Elastic Search中的结果获取每个坐标的距离

c# - Elastic Search .NET Core 对 Post 的低级别调用不成功

c# - 如何使用 NEST 通过谓词删除所有文档