2016-05-24 31 views
0

我正在使用Elasticsearch 1.7.x(和NEST 1.7.2)並試圖利用查找過濾的優勢,如下所述:Terms Filter Lookup。我可以手工製作JSON,並使用Sense執行它。偉大的工作,真棒功能!但是,在NEST庫中,我沒有看到創建這樣的條款子句的方法。例如,從上面提到的鏈接,我可以做這樣的事情:Elasticsearch和NEST:使用查找進行篩選

"terms" : { 
    "proteins" : { 
     "index" : "microarrays", 
     "type" : "experiment", 
     "id" : "experiment1234", 
     "path" : "upregulated_proteins" 
    }, 
    "_cache_key" : "experiment_1234" 
} 

有沒有辦法使用NEST構建這個查詢?如果沒有,我有沒有辦法在構建它時將一些JSON注入到NEST查詢中?我不知道NEST 2.x +是否支持這個功能,但升級到ES 2.x對我們來說是一個長期計劃,我想要利用ES 1.7中已有的功能。

回答

0

太棒了,我已經收到Elastic的Greg Marzouka的回答!他說:

它被映射爲TermsLookup()或TermsLookupFilter in 1.x.查看unit tests的一些示例。

client.Search<Paper>(s => s 
    .Query(q => q 
     .Filtered(fq => qf 
     .Filter(f => f 
      .CacheKey("experiment_1234") 
      .TermsLookup(t => t 
       .Lookup<Protein>(p => p.UnregulatedProteins, "experiment1234", "microarrays", "experiment") 
      ) 
     ) 
    ) 
    )); 

在2.x中這是多一點與ES查詢DSL對齊。

+0

作爲一個推論,對於NEST庫的1.7版本,有一個bug使得在需要時清除緩存變得非常棘手。這裏有一個來自NEST團隊的鏈接,描述瞭如何解決這個問題:https://github.com/elastic/elasticsearch-net/issues/2229 –