2016-03-08 63 views
1

我想在特定文檔的內容字段中獲得熱門術語。 我該怎麼做? 到目前爲止,我已經嘗試了下面的代碼,但聽起來像特定文檔ID上的過濾不起作用。在Nest elasticsearch中對特定文檔使用術語聚合

var result = client.Search<Document>(s => s.Index(defaultIndex).Filter(f => f.Term(t => t.Id, ID)). 
    Aggregations(a => a.Terms("terms_agg", 
    sa => sa.Field(p => p.File).Size(20)))); 
    var agg = result.Aggs.Terms("terms_agg"); 

有誰知道是否有可能使用術語聚合獲得特定內容中熱門術語的列表?或者如果在elasticsearch中有任何其他方式來做到這一點?

回答

1

您需要爲此使用過濾後的查詢。

var result = client.Search<Document>(s => s 
    .Index(defaultIndex) 
    .Query(q => q 
     .Filtered(fq => fq 
      .Filter(f => f 
       .Term(t => t.Id, ID)))) 
    .Aggregations(a => a 
     .Terms(
      "terms_agg", 
      sa => sa.Field(p => p.File) 
    .Size(20)))); 
var agg = result.Aggs.Terms("terms_agg"); 

原因是聚合的範圍是頂層「查詢」部分所匹配的文檔。您正在使用的過濾器是後過濾器。後過濾器的結果不會影響彙總的文檔範圍。在您的請求中,「查詢」部分隱含地是「match_all」查詢,因此您可以看到多個文檔被彙總。通過強制頂級查詢部分內的文檔過濾器,您可以限制聚合的範圍。

相關問題