【问题标题】:Aggregation that returns the users name and id?返回用户名和ID的聚合?
【发布时间】:2021-12-31 21:44:28
【问题描述】:

我正在使用 ES 和 Rails Searchkick

我正在使用聚合来构建这样的搜索过滤器:

{
  aggs: {
    user_id: {},
    user: {},
  }
}

我可以根据user 结果中的链接(如?user=Dan%20Tappin)运行查询,但理想情况下,我希望链接显示Dan Tappin?user_id=1 的链接。

我可以让 aggs 返回如下内容吗:

{
  "buckets" => [
    { "key" => "Dan Tappin", "id" => "1", "doc_count" => 307 },
  ]
}

我知道我可以构建像first_name + " " + last_name + "+++" + id 这样的自定义映射,然后解析 agg 以获取名称/ID。只是看看有没有更优雅的方法。

【问题讨论】:

    标签: elasticsearch searchkick


    【解决方案1】:

    最有效的方法可能是像您自己所说的那样预先定义它们。不涉及映射的替代方法是添加一个嵌套的热门聚合,我不太确定 Searchkick 的语法,但它会在这些行中构建它:

    {
      "aggs": {
        "user_ids": {
          "terms": {
            "field": "user_id"
          },
          "aggs": {
            "user": {
              "top_hits": {
                "size": 1
              }
            }
          }
        }
      }
    }
    

    这将 top-k user_ids 和每个 user_id 的 top1 个文档,因此您可以结合 top hits 聚合的结果以从 terms 聚合中获取用户详细信息和 doc_count。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      相关资源
      最近更新 更多