2014-09-22 103 views
1

下面的Sense查詢返回我正在查找的結果,但是當我將其轉換爲NEST查詢時,我總是收到0個結果。我哪裏錯了?無法將ElasticSearch多索引查詢轉換爲NEST查詢

GET /event,meeting,executive,list,call/_search 
{ 
    "query": { 
    "filtered": { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "match": { 
       "name": "sample query" 
       } 
      }, 
      { 
       "match": { 
       "agenda": "sample query" 
       } 
      } 
      ] 
     } 
     }, 
     "filter": { 
     "query": { 
      "match": { 
      "symbol": "SAMPLESYMBOL" 
      } 
     } 
     } 
    } 
    } 
} 

這裏是我使用的NEST搜索描述符,總是返回0個結果。

return arg.Indices(new[] { "event", "meeting", "executive", "list", "call" }) 
    .Size(size) 
    .Filter(f => f.Query(qu => qu.Match(m => m.OnField("symbol").Query("SAMPLESYMBOL")))) 
    .Query(q => q 
     .Bool(b => b 
      .Should(
       s => s.Match(m => m.Query(query).OnField("name")), 
       s => s.Match(m => m.Query(query).OnField("agenda"))))); 

回答

2

的查詢的工作。正義是filtered query,而在NEST您正在執行除了過濾器的查詢。這可能是問題。

試試這個,這應該產生相當於JSON你在意識運行查詢:

.Indices(new[] { "event", "meeting", "executive", "list", "call" }) 
.Size(size) 
.Query(q => q 
    .Filtered(f => f 
    .Query(qq => qq 
     .Bool(b => b 
     .Should(s => s.Match(m => m.OnField("name").Query(query))) 
     .Should(s => s.Match(m => m.OnField("agenda").Query(query))) 
    ) 
    ) 
    .Filter(ff => ff 
     .Query(qf => qf 
     .Match(m => m.OnField("symbol").Query("SAMPLESYMBOL")) 
    ) 
    ) 
) 
);