Elasticsearch .NET Nest 查询组合

3 篇文章 0 订阅

有用过滤条件是从数据库中获取的而且不知道多少个数,所以动态拼接条件

在官网找到一下 最后在这个文章中找到灵感 https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/bool-queries.html

在循环中使用按位分配,以将许多查询组合成一个更大的布尔值.NET

在此示例中,我们使用&= Assign运算符创建了一个带有1000个must子句的布尔查询。

var c = new QueryContainer();
var q = new TermQuery { Field = "x", Value = "x" };

for (var i = 0; i < 1000; i++)
{
    c &= q;
}

官网没写怎么用,我又研究了一下,代码如下

s => s.Index($"{indices.GetString("xxx")}").From(0).Size(10)
    .Query(q => q
        .Bool(b => b
        .Must(c) // 动态拼接
    )

由于业务需求是 屏蔽 数据库中的这些

查找的这篇官方文档后使用must_not https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

所以我又改了一下

// 需要屏蔽的 关键字 集合
var queryContainer = new QueryContainer();
foreach (var keyValue in keyList)    // 数据库中查出来的 List<string> keyList
{
	var x = new MatchPhraseQuery { Field = "namecn", Query = keyValue };
	queryContainer |= x;  // 添加 一个需要过滤掉的关键字  注意这里是 | (或 而且是一个)
}

 然后 使用 MustNot 来过滤掉电邮

s => s.Index($"{indices.GetString("xxx")}").From(0).Size(10)
    .Query(q => q
        .Bool(b => b
        .MustNot(queryContainer ) // 动态拼接
    )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值