2
私はPurchaseOrder
の型を持っていますが、これは0または多くのVendorStatuses
を持つことができます。 PurchaseOrders
のフィルタを作成して、をVendorStatuses
としたいとします。これどうやってするの?Elasticsearch Nestで子を含む行をフィルタリングする
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件の記録があり、そして私は、ベンダーのステータスを持っていない少なくとも一つがあります知っているが、これらのクエリは、すべて、または何も戻ってきている。
物事は私が試してみました。これをどのように実装できますか?
我々はこれを行う方法を見つけた巣1.7.2とElasticsearchバージョン1.4.5
NESTは '&' 'オーバーロード|接続詞、選言とクエリと容易にフィルタの否定を作るために' FilterContainer'と 'QueryContainer'上の'と ''演算子を!。 2.xでは、 '+'単項演算子もオーバーロードされ、 'bool'クエリ' filter'節にクエリーをラップします。 –
私は彼らが '&'と '|'をオーバーロードしているのを知っていましたが、 '!'が上書きされているのを見ることができませんでした。 – DLeh