2017-03-17 122 views
0

我想,我正在使用elasticsearch的5.2版本到下面彈性搜索DSL轉換爲NEST查詢Elasticsearch DSL查詢到.NET NEST

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)) 
             )))))); 

回答

2

你不需要使用Filter.Just加嵌套必須查詢添加嵌套部分

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)) 
             )))));