从弹性中排除(不包含)某些值的查询
Query to exclude (doesn't contain) certain values from elastic
我正在使用 NEST 查询从 elastic 中过滤记录。
以下查询将根据 articleIds
列表过滤记录。它工作正常。
QueryContainer nestedQuery = null;
nestedQuery &= Query<PublishedArticle>.Terms(qs => qs
.Field(f => f.AssignedArticleList.FirstOrDefault().AssignedArticleId)
.Terms(articleIds)
);
但现在我想获取不包含属性 articleIds
中的值的记录。我如何实现这一目标?正在检查 must_not
子句上的弹性 documents。如何构建此查询?
articleIds
基本上是一个整数列表。
感谢任何帮助! :)
您需要一个带有 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
]
}
}
]
}
}
}
我正在使用 NEST 查询从 elastic 中过滤记录。
以下查询将根据 articleIds
列表过滤记录。它工作正常。
QueryContainer nestedQuery = null;
nestedQuery &= Query<PublishedArticle>.Terms(qs => qs
.Field(f => f.AssignedArticleList.FirstOrDefault().AssignedArticleId)
.Terms(articleIds)
);
但现在我想获取不包含属性 articleIds
中的值的记录。我如何实现这一目标?正在检查 must_not
子句上的弹性 documents。如何构建此查询?
articleIds
基本上是一个整数列表。
感谢任何帮助! :)
您需要一个带有 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
]
}
}
]
}
}
}