在特定文档的 Nest elasticsearch 中使用 Terms 聚合
Using Terms aggregation in Nest elasticsearch for a specific document
我想获取特定文档内容字段中的热门术语。
我怎样才能做到这一点?
到目前为止,我已经尝试了下面的代码,但听起来好像对特定文档 ID 的过滤不起作用。
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");
有谁知道是否可以使用 Terms 聚合获取特定内容中的热门术语列表?或者elasticsearch有没有其他方法可以做到?
您需要为此使用过滤查询。
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");
原因是聚合范围是顶级 "query" 部分匹配的文档。您使用的过滤器是 post 过滤器。 post 过滤器的结果不会影响聚合的文档范围。在您的请求中,"query" 部分隐含地是一个 "match_all" 查询,因此您会看到多个文档被聚合。通过在顶级查询部分强制使用文档过滤器,您可以限制聚合范围。
我想获取特定文档内容字段中的热门术语。 我怎样才能做到这一点? 到目前为止,我已经尝试了下面的代码,但听起来好像对特定文档 ID 的过滤不起作用。
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");
有谁知道是否可以使用 Terms 聚合获取特定内容中的热门术语列表?或者elasticsearch有没有其他方法可以做到?
您需要为此使用过滤查询。
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");
原因是聚合范围是顶级 "query" 部分匹配的文档。您使用的过滤器是 post 过滤器。 post 过滤器的结果不会影响聚合的文档范围。在您的请求中,"query" 部分隐含地是一个 "match_all" 查询,因此您会看到多个文档被聚合。通过在顶级查询部分强制使用文档过滤器,您可以限制聚合范围。