elasticsearch 如何在NEST 2.3.0中使用带must子句和filter子句的bool查询,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 如何在NEST 2.3.0中使用带must子句和filter子句的bool查询,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 如何在NEST 2.3.0中使用带must子句和filter子句的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)

文档说过滤后的查询是

在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)
                .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
query
must
子句,同样地,在使用
filtered
query筛选器的地方,现在可以使用
bool
query
filter
子句

在您的情况下,必须满足多个筛选子句,因此在传递到外部bool
filter
子句的
bool
查询中包装为一组
must
子句是正确的

在Elasticsearch 2.0中,使用查询上下文和过滤器上下文的概念;当包装在
bool
query
filter
子句中时,查询/过滤器位于过滤器上下文中,因此不会计算相关性分数,并且可以缓存


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" } } }
            ]
          }
        }
      ]
    }