1 回答
TA贡献1836条经验 获得超3个赞
只要将hashtextonhashtags映射为keyword数据类型(或映射为启用了 fielddatatext的数据类型,并附带执行此操作的警告),您所拥有的将起作用。
这是一个工作示例
private static void Main()
{
var defaultIndex = "my_index";
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var settings = new ConnectionSettings(pool)
.DefaultIndex(defaultIndex);
var client = new ElasticClient(settings);
if (client.IndexExists(defaultIndex).Exists)
client.DeleteIndex(defaultIndex);
var createIndexResponse = client.CreateIndex(defaultIndex, c => c
.Mappings(m => m
.Map<Tweet>(mm => mm
.AutoMap()
)
)
);
var bulkResponse = client.Bulk(b => b
.IndexMany(new []
{
new Tweet
{
id = 1,
text = "foo",
hashtags = new List<hashtags>
{
new hashtags { hashtext = "aaaa" },
new hashtags { hashtext = "bbbb" },
new hashtags { hashtext = "cccc" }
}
},
new Tweet
{
id = 2,
text = "bar",
hashtags = new List<hashtags>
{
new hashtags { hashtext = "aaaa" },
new hashtags { hashtext = "bbbb" }
}
},
new Tweet
{
id = 3,
text = "baz",
hashtags = new List<hashtags>
{
new hashtags { hashtext = "aaaa" },
new hashtags { hashtext = "cccc" }
}
}
})
.Refresh(Refresh.WaitFor)
);
var searchResponse = client.Search<Tweet>(s => s
.Size(0)
.Aggregations(childAggs => childAggs
.Nested("hashtags", n => n
.Path(p => p.hashtags)
.Aggregations(nestedAggs => nestedAggs
.Terms("by_tags", t => t
.Field(f => f.hashtags.First().hashtext)
)
)
)
)
);
var hashtagBuckets = searchResponse.Aggregations.Nested("hashtags").Terms("by_tags").Buckets;
foreach(var bucket in hashtagBuckets)
{
Console.WriteLine($"{bucket.Key}\t{bucket.DocCount} times");
}
}
public class Tweet
{
public ulong id { get; set; }
public string text { get; set; }
[Nested]
public List<hashtags> hashtags { get; set; }
}
public class hashtags
{
[Keyword]
public string hashtext { get; set; }
}
它将以下内容写入控制台
aaaa 3 times
bbbb 2 times
cccc 2 times
- 1 回答
- 0 关注
- 107 浏览
添加回答
举报