数组上的术语聚合

时间:2020-02-08 19:44:55

标签: elasticsearch nest elasticsearch-aggregation

索引字段有问题,该索引字段以以下方式存储字符串列表

[“ abc_def_fgh”,“ abc_def_fgh”,“ 123_345_456”]

我正在尝试使用TermsAggregation获取

“ abc_def_fgh”(2) “ 123_345_456”(1)

但是无法使其正常工作,因为它会得出每个术语(abc(2),def(2)等)的计数

有什么主意吗?

非常感谢

2 个答案:

答案 0 :(得分:1)

尝试类似

setCurrentCell

对于我索引中的这三个文档

var result = await client.SearchAsync<Document>(s => s
    .Size(0)
    .Aggregations(a => a
        .Terms("tags", t => t.Field(f => f.Tags.Suffix("keyword")))));

foreach (var bucket in result.Aggregations.Terms("tags").Buckets)
{
    System.Console.WriteLine($"Tag {bucket.Key}, doc count: {bucket.DocCount}");
}

public class Document
{
    public string Id { get; set; }
    public string[] Tags { get; set; } = { };
}

它将输出

new Document {Id = "1", Tags = new[]{"a","b"}
new Document {Id = "2", Tags = new[]{"a"}
new Document {Id = "3", Tags = new[]{"c"}

希望有帮助。

答案 1 :(得分:0)

这听起来像是映射问题。您需要确保使用的是keyword而不是text。您不希望在使用聚合时对字段进行分析。