当前位置: 首页 > 知识库问答 >
问题:

elasticsearch:在热门聚合字段上运行脚本

欧盛
2023-03-14

我想执行一个术语聚合,并在执行脚本操作后的每个结果桶中获取命中字段。

例如,如果这些是文档:

{"age": 15, "firstName": "Dana", "lastName": "Miller"}
{"age": 15, "firstName": "Michelle", "lastName": "Bob"}
{"age": 32, "firstName": "Mary", "lastName": "Smith"}
{"age": 32, "firstName": "Anna", "lastName": "Taylor"}

聚合按“年龄”字段进行,脚本为:“return‘doc['firstName']”doc['lastName']”

结果应该是:

铲斗1(年龄:15岁):

    null
  • 玛丽·史密斯
  • 安娜·泰勒

这在elasticsearch中可能吗?

编辑:

此外,我正在寻找一种在一个bucket中多次命中的情况下运行脚本的方法。例如,如果我们使用上面的文档和“年龄”字段的术语聚合,我可以通过以下方式获得桶中命中数的结果吗?

桶1(15岁):

  • “Dana Miller和Michelle Bob”

Bucket2(32岁):

  • 《玛丽·史密斯和安娜·泰勒》

在ES中可能吗?

非常感谢。

共有1个答案

钱星辰
2023-03-14

我想下面的查询可以帮助您。

{
"size": 0,
"aggs": {
  "group By age": {
     "terms": {
        "field": "age"
     },
     "aggs": {
        "top hits": {
           "top_hits": {
              "script_fields": {
                 "Name": {
                    "script": "doc['firstName'].value + ' ' + doc['lastName'].value "
                  }
                 }
              }
           }
        }
      }
   }
  }

希望这有帮助!!

 类似资料:
  • 问题内容: 我正在尝试创建一个脚本字段,该脚本字段将计算两个时间戳之间的时间差,然后在该脚本字段上聚合一个。 我首先尝试: 在合计平均值下产生价值。 然后我尝试了: 生成了一条错误消息,内容为:“在映射中找不到[timedifference]的字段” 问题答案: 简单地将脚本移到聚合上怎么样?

  • 我想根据top hits聚合中第一个元素所拥有的属性,从terms聚合中订购Bucket。 我的尽力而为查询如下(有语法错误): 有人知道如何做到这一点吗? 例子: 按“a”分组,按“id”(desc)排序存储桶,并按“b”(desc)排序最热门的内容,将给出:

  • 问题内容: 我想在字段上使用stats或extended_stats聚合,但是找不到完成此操作的任何示例(即,似乎只能将聚合与实际文档字段一起使用)。 是否有可能计算出“元数据”在ElasticSearch查询响应每个命中字段请求集合(例如,,,,等等)? 我假设答案是“否”,因为未对类似字段进行索引… 问题答案: 注意:就最新版本的Elasticsearch而言,原始答案现在已过时。使用Groo

  • 问题内容: 我想按top_hit的doc.score订购存储桶。我当前的实现如下。 这是错误的,因为存储桶是按其最高得分而不是其source_priority文档最高得分排序的。有办法解决这个问题吗? 问题答案: 我遇到了同样的问题,而解决问题的方法是在docs得分上引入子汇总。然后在我的外部聚合中,我按max_score聚合的名称排序。 我遵循了此链接上的指示: http://www.elast

  • 问题内容: 我目前有类似的东西: 但是,myfield的值为“ alpha 1.0”,“ alpha 2.0”,“ beta 1.0”。现在,我只想聚合值“ alpha”,“ beta”。我怎么做?我试过了: 但我想这里没有拆分功能。欢迎任何建议! 问题答案: 我设法通过粘贴在问题中的链接来完成此任务:

  • 问题内容: 我想将数据汇总到另一个字段中,也想根据名称以排序方式获取汇总数据。 我的数据是: 我的查询: 我的映射是: 我正在根据分组记录的相关性平均值来获取数据。现在,我想要的是第一个基于groupid的记录,然后在每个存储桶中根据名称字段对数据进行排序。 我想对一个字段进行分组,然后在对分区进行分组之后,对另一个字段进行排序。这是样本数据。 还有其他字段,例如created_on,update