查询从弹性中排除(不包含)某些值

时间:2016-09-30 10:41:04

标签: c# elasticsearch nest

我正在使用NEST查询来过滤弹性记录。

以下查询将根据articleIds列表过滤记录。它工作正常。

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

但现在我想获取不包含prop articleIds中值的记录。我该如何实现这一目标?检查must_not条款上的弹性documents。如何构建此查询?

articleIds基本上是一个整数列表。

任何帮助表示赞赏! :)

1 个答案:

答案 0 :(得分:3)

您需要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) ) ) ) ) ); 运算符,可以使用运算符重载到NEST缩短!

must_not

两者都产生

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