我对Elasticsearch
很新,我正在使用NEST库。如何计算重复值?
这是我的班级:
public class Book
{
public string BookName {get;set;}
public string Author {get;set;}
}
这是我的数据:
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
我尝试了以下查询,但它不起作用:
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 :(得分: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();