2 つのフィールドに複数の And/OR 条件を持つ NEST クライアントを使用して、ES からドキュメントを取得する必要があります。
私のクエリは次のとおりです。
SELECT * FROM Document WHERE (Year!=2012 && Year!=2013 ) AND (Format=".pdf" || Format=".prt" || Format=".jpeg")
以下は私のコードです:
var qc = new List<QueryContainer>();
foreach (var year in years)// years is the list of years that must not be included
{
qc.Add(Query<Document>.Match(m => m.OnField(p => p.Year).Query(year)));
}
var qF = new List<QueryContainer>();
foreach (var format in txtDocs)// txtDocs is the list of formats that should be included if available
{
qF.Add(Query<Document>.Match(m => m.OnField(p => p.Format).Query(format)));
}
var searchResults = client.Search<Document>(s => s.Index(defaultIndex).From(0).Size(50).
Query(
f => f.Bool(
b => b
.MustNot(qc.ToArray()).Should(qF.ToArray()))));
このコードを試してみると、結果に表示されてはならない年には機能しますが、ユーザーが選択する必要がある形式では、選択された形式は表示されますが、それらは表示されません。「should」の代わりに「must」も使用しましたが、何も取得されません。
誰かがそのような同様の問題を抱えていましたか?