elasticsearch 如何在NEST 2.3.0中使用带must子句和filter子句的bool查询
文档说过滤后的查询是 在2.0.0-beta1中已弃用。必须使用bool查询 子句和筛选器的筛选器子句 这是过滤子句的正确用法吗elasticsearch 如何在NEST 2.3.0中使用带must子句和filter子句的bool查询,elasticsearch,nest,elasticsearch,Nest,文档说过滤后的查询是 在2.0.0-beta1中已弃用。必须使用bool查询 子句和筛选器的筛选器子句 这是过滤子句的正确用法吗 var result = client.Search<Post>(x => x .Query(q => q .Bool(b => b .Must(m => m .MultiMatch(mp => mp .Query(query)
var result = client.Search<Post>(x => x
.Query(q => q
.Bool(b => b
.Must(m => m
.MultiMatch(mp => mp
.Query(query)
.Fields(f => f
.Fields(f1 => f1.Title, f2 => f2.Body, f3 => f3.Tags))))
.Filter(f => f
.Bool(b1 => b1
.Must(filters)))))); // or filter?
在使用
filtered
query查询的地方,现在可以使用bool
querymust
子句,同样地,在使用filtered
query筛选器的地方,现在可以使用bool
queryfilter
子句
在您的情况下,必须满足多个筛选子句,因此在传递到外部boolfilter
子句的bool
查询中包装为一组must
子句是正确的
在Elasticsearch 2.0中,使用查询上下文和过滤器上下文的概念;当包装在bool
queryfilter
子句中时,查询/过滤器位于过滤器上下文中,因此不会计算相关性分数,并且可以缓存
NEST 2.x与Elasticsearch 2.0中的更改保持一致,并具有可在查询和筛选上下文中使用的查询(
QueryContainer
,QueryContainerDescriptor
,等等)。如果运行它,会产生什么结果?这是否意味着如果我想在查询中应用筛选,即使是我的原始查询也是应该查询,我必须使用“必须”查询“filter?@batmaci-否。如果您有should
和must
子句,这些子句应保持原样filter
不参与评分,通常会被缓存,这意味着在您希望筛选将计算评分的文档时,它们往往会更快。QueryDescriptor在NEST 2.x中不可用,@RussCam,您能回答这个问题吗
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "javascript",
"fields": [ "title", "body", "tags" ]
}
}
],
"filter": [
{
"bool": {
"must": [
{ "term": { "tags": { "value": "javascript" } } },
{ "term": { "tags": { "value": "ajax" } } },
{ "term": { "tags": { "value": "jquery" } } }
]
}
}
]
}