2016-09-30 90 views
1

我正在使用NEST查詢從彈性篩選記錄。查詢從彈性排除(不包含)某些值

以下查詢將根據articleIds列表篩選記錄。它工作正常。

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

但現在我想獲取不包含在道具articleIds值的記錄。我如何實現這一目標?正在檢查must_not條款上的彈性documents。我如何構建這個查詢?

articleIds基本上是一個整數列表。

任何幫助表示讚賞! :)

回答

2

你需要一個bool查詢與must_not條款

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可以在NEST使用運算符重載

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

縮短兩者產生

{ 
    "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,我們正在進一步擴展以包含分析的其他部分,索引,滲透等,以及更好地組織那裏的部分。 –

相關問題