0

我正在尝试将以下弹性搜索 DSL 转换为 NEST 查询,我使用的是弹性搜索 5.2 版

GET articles/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "FIY",
            "fields": [
              "title"
            ]
          }
        },
        {
          "nested": {
            "path": "tags",
            "query": {
              "terms": {
                "tags.tagName": [
                  "competition"
                ]
              }
            }
          }
        }
      ]
    }
  }
}

到目前为止,我得到了以下内容,我知道过滤器部分不应该在那里,但我似乎无法添加嵌套部分没有它

var result = client.Search<Article>(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.Content, f3 => f3.Tags))))

                        .Filter(f => f
                            .Nested(n => n
                                .Path("tags")
                                .Query(q1 => q1
                                    .Terms(t1 => t1.Field(f2 => f2.Tags).Terms(tags))
                                         ))))));
4

1 回答 1

2

您不需要使用过滤器。只需将嵌套添加到必须查询中

  var result = client.Search<Article>(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.Content, f3 => f3.Tags)),                    
                           m=> m.Nested(n => n
                                .Path("tags")
                                .Query(q1 => q1
                                    .Terms(t1 => t1.Field(f2 => f2.Tags).Terms(tags))
                                         )))));
于 2017-03-17T11:20:57.483 回答