2017-04-21 115 views
0

我试图将下面的DSL查询转换为.net NEST查询,我使用的是elasticsearch的5.2版本。DSL查询到.net嵌套查询

{ 
    "size": 10, 
    "from": 0, 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "multi_match": { 
      "query": "finished", 
      "fields": [ 
       "title", 
       "content" 
      ] 
      } 
     } 
     ], 
     "filter": { 
     "bool": { 
      "must": [ 
      { 
       "term": { 
       "applianceTypeId": "2a682cf7-5fe3-470f-81b2-a74e00ec7c9d" 
       } 
      }, 
      { 
       "term": { 
       "applianceCategoryId": "bde32268-b62f-45cc-8d7d-a74a00d61476" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

到目前为止,我已经得到了下面,但我有处理多个方面的问题。任何人都可以建议我失踪?

 var result = client.Search<AdviceSearchDocument>(x => x 
           .From(page -1) 
           .Size(10) 
           .Query(q => q 
            .Bool(b => b 
             .Must(m => m 
              .MultiMatch(mm => mm 
               .Query(query) 
               .Fields(f => f 
                .Fields(f1 => f1.Title, f1 => f1.Content)))) 
              .Filter(f => f 
               .Bool(b1 => b1 
                .Must(m1 => m1 
                 .Term(t =>t 
                   .Field(fl =>fl.ApplianceTypeId) 
                   .Value(applicanceTypeId) 
                   ) 

                  )))))); 
+1

看看上编写查询的文档(https://www.elastic.co/guide /en/elasticsearch/client/net-api/current/writing-queries.html)并编写布尔查询(https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/bool- queries.html)。那里有一些我认为会帮助你的信息 –

回答

0

如果问题是如何applianceTypeIdapplianceCategoryId查询组合,这里是解决方案

var result = client.Search<AdviceSearchDocument>(x => x 
    .From(0) 
    .Size(10) 
    .Query(q => q 
     .Bool(b => b 
      .Must(m => m 
       .MultiMatch(mm => mm 
        .Query(query) 
        .Fields(f => f 
         .Fields(f1 => f1.Title, f1 => f1.Content) 
        ) 
       ) 
      ).Filter(f => f 
       .Term(t => t 
        .Field(fl => fl.ApplianceTypeId) 
        .Value(applicanceTypeId) 
       ) & f.Term(t => t 
        .Field(fl => fl.ApplianceCategoryId) 
        .Value(applianceCategoryId) 
       ) 
      ) 
     ) 
    ) 
);