2016-09-30 14 views
1

NESTクエリを使用して弾性からレコードをフィルタリングしています。弾性から特定の値を除外するクエリ(含まれません)

次のクエリは、articleIds listに基づくレコードをフィルタ処理します。それはうまく動作します。

QueryContainer nestedQuery = null; 
nestedQuery &= Query<PublishedArticle>.Terms(qs => qs 
       .Field(f => f.AssignedArticleList.FirstOrDefault().AssignedArticleId) 
        .Terms(articleIds) 
      ); 

しかし、今、私は小道具articleIdsの値が含まれていないレコードを取得したいです。これをどのように達成するのですか? must_not欄に弾力性を確認しました。documentsこのクエリを作成するにはどうすればよいですか?

articleIdsは、基本的に整数のリストです。

あなたは!演算子を使用して

var articleIds = new[] { 1, 2, 3, 4 }; 

client.Search<PublishedArticle>(s => s 
    .Query(q => q 
     .Bool(b => b 
      .MustNot(mn => mn 
       .Terms(t => t 
        .Field(f => f.AssignedArticleList.FirstOrDefault().AssignedArticleId) 
        .Terms(articleIds) 
       ) 
      ) 
     ) 
    ) 
); 

must_not句でboolクエリを必要とする

答えて

2

:)、must_not

client.Search<PublishedArticle>(s => s 
    .Query(q => !q 
     .Terms(t => t 
      .Field(f => f.AssignedArticleList.FirstOrDefault().AssignedArticleId) 
      .Terms(articleIds) 
     ) 
    ) 
); 

の両方が

を生成する演算子オーバーロードを使用してNESTに短縮することができます
{ 
    "query": { 
    "bool": { 
     "must_not": [ 
     { 
      "terms": { 
      "assignedArticleList.assignedArticleId": [ 
       1, 
       2, 
       3, 
       4 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

ありがとうございました。完璧にうまくいった! :)他のチュートリアルの参考文献はありますか? – Raghavendra

+1

クライアント文書(https://www.elastic.co/guide/en/elasticsearch/client/net-api/2.x/index.html)があります。詳細は、分析、索引付け、パーコレーションなどを行うことができます。 –

関連する問題