字段在收集时崩溃

Field collapsing on collection

假设我有一个非常简单的索引。 Blog postblog categories。一个博客属于一个或 多个 个类别。

我想为每个类别查找最后 3 个帖子。我怎样才能做到这一点 ?我在这里 "Field collapsing" 读到了 https://www.elastic.co/guide/en/elasticsearch/guide/current/top-hits.html 但这个例子指的是一个标量场,我有一个集合。

文档可以是:

{ "title" : "My post",
  "categories" : [{ "tech" => "Technology", "professional" => "Professional"]
},
{ "title" : "My secondo post",
  "categories" : [{ "professional" => "Professional"]
},

您只能聚合值,不能聚合键,因此第一步是简化您的 categories 字段。

如果您可以将 categories 简单地索引为字符串列表(例如,您的类别 slugs 而不是 slug => slug_title 对),那么您可以使用 Terms Aggregation to show you all of the categories present in your result-set, and then a nested Top Hits Aggregation显示按日期排序的前三个帖子。

我相信 this example on the Top Hits Aggregation 页面正在做您想要的(前提是您可以将类别索引为字符串列表)。