从Elastic中排除(不包含)特定值的查询

3

我正在使用NEST查询从Elastic中过滤记录。

以下查询将基于articleIds列表过滤记录。它运行良好。

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

现在我想获取不包含属性 articleIds 值的记录。我该如何实现?查看了弹性文档中的 must_not 子句。我该如何构建此查询? articleIds 基本上是一个整数列表。
感谢任何帮助! :)
1个回答

4
您需要使用一个带有 must_not 子句的 bool 查询。
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)
        )
    )
);

两者都可以产生

{
  "query": {
    "bool": {
      "must_not": [
        {
          "terms": {
            "assignedArticleList.assignedArticleId": [
              1,
              2,
              3,
              4
            ]
          }
        }
      ]
    }
  }
}

谢谢。运行得非常完美! :) 除了弹性文档中提到的内容,还有其他的教程参考吗? - ragmn
1
我们有客户端文档 - https://www.elastic.co/guide/en/elasticsearch/client/net-api/2.x/index.html,我们希望进一步扩展它,包括关于分析、索引、过滤等方面的额外章节,并更好地组织这些章节。 - Russ Cam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接