2017-11-19 14 views
1

私はElasticsearchで新しく、NESTライブラリを使用しています。重複した値のカウントを取得するにはどうすればよいですか?値の重複値の取得方法

BookName=X, Author=a<br> 
BookName=Y, Author=a<br> 
BookName=Z, Author=b<br> 
BookName=C, Author=b<br> 
BookName=T, Author=c<br> 


クエリ結果は次のようになります:

a- 2 
b- 2 
c- 1 


この

public class Book 
{ 
    public string BookName {get;set;} 
    public string Author {get;set;} 
} 
が私のデータである。ここでは
は私のクラスであります

私は、次のクエリを試してみましたが、それは動作しません:

client.Search<Book>(s => s 
.Aggregations(a => a 
.Terms("group_by_auth", ts => ts 
     .Field(o => o.Author) 
     .Size(10) 
     .Aggregations(aa => aa 
      .Sum("sum_value", sa => sa 
       .Field(o => o.Author) 
      ) 
     ) 
    ) 
)); 

マッピングは次のとおりです。

client= new ElasticClient(connectionSettings); 
     client.CreateIndex("books", c => c 
     .Mappings(m => m 
      .Map<Book>(mm => mm 
      .Properties(ps=>ps 
      .Text(s=>s 
      .Name(a=>a.Author) 
      ))) 
     ) 
+0

どのバージョンのElasticsearchをお使いですか? 'Author'のマッピングはどうなっていますか? –

+0

私は質問を編集しています。私は最新のバージョンを使用しています – Gustavo

+0

結果を取得したら、内部集計を削除するだけでDocCountプロパティを持つ必要はありません。また、Authorフィールドにトークンがある場合は、代わりにauthor.keywordフィールドでそれを行う必要があります。 –

答えて

0

あなたは用語のカウントをしたい場合は、そう

のようにそれを得ることができます
var uri = new Uri("http://localhost.fiddler:9200"); 

      ElasticClient db = new ElasticClient(uri); 

      var data = new[] { 
           new{ BookName= "X", Author="a" }, 
           new{ BookName= "Y", Author="a" }, 
           new{ BookName= "Z", Author="b" }, 
           new{ BookName= "C", Author="b" }, 
           new{ BookName= "T", Author="c" }, 
          }; 

      db.DeleteIndex("test"); 

      foreach (var d in data) 
      { 
       db.Index(d, id => id.Index("test")); 
      } 

      System.Threading.Thread.Sleep(1000); 

      var items = db.Search<dynamic>(s => s.Size(0).Aggregations(aggr => aggr.Terms("group_by_auth", ts => ts.Field("author.keyword")))); 

      foreach (var item in items.Aggs.Terms("group_by_auth").Buckets) 
      { 
       Console.WriteLine(item.Key + "-" + item.DocCount); 
      } 

      Console.WriteLine("DONE"); 

      Console.ReadLine(); 
関連する問題