【问题标题】:Query to exclude (doesn't contain) certain values from elastic查询以从弹性中排除(不包含)某些值
【发布时间】:2016-09-30 21:46:39
【问题描述】:

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

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

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

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

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

任何帮助表示赞赏! :)

【问题讨论】:

    标签: c# elasticsearch nest


    【解决方案1】:

    您需要一个带有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)
                    )
                )
            )
        )
    );
    

    使用 ! 运算符,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
                ]
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

    • 谢谢。工作得很好! :) 除了弹性文档中提到的内容之外,还有其他教程参考吗?
    • 有客户文档 - elastic.co/guide/en/elasticsearch/client/net-api/2.x/index.html,我们希望进一步扩展它,以包括关于分析、索引、渗透等的其他部分,并在那里更好地组织这些部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2014-08-16
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多