文档说过滤查询是
在2.0.0-beta1中弃用。请使用bool查询而不是必须 查询的子句和过滤器的过滤子句。
这是否正确使用了filter子句?
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?
查询是string
,过滤器是Func<QueryContainerDescriptor<Post>, QueryContainer>[]
原始JSON请求是:
"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" } } }
]
}
}
]
}
答案 0 :(得分:1)
您将使用filtered
查询查询,现在您将使用bool
查询must
子句,同样,您将使用{{ {1}}查询过滤器,您现在将使用filtered
查询bool
子句。
在您的情况下,您必须满足多个filter子句,因此在传递给外部bool filter
子句的must
查询中包装为一组bool
子句是正确的。
在Elasticsearch 2.0中,queries and filters merged into one,具有查询上下文和过滤器上下文的概念;当包含在filter
查询bool
子句中时,查询/过滤器位于过滤器上下文中,因此不会计算相关性分数,并且它将是可缓存的。
NEST 2.x与Elasticsearch 2.0中的更改保持一致,并具有可在查询和过滤器上下文中使用的查询(filter
,QueryContainer
等)。