elasticsearch,Groovy,elasticsearch" /> elasticsearch,Groovy,elasticsearch" />

Groovy 弹性搜索中两个字段的划分

Groovy 弹性搜索中两个字段的划分,groovy,elasticsearch,Groovy,elasticsearch,目前,我正在尝试根据一个字段对一个字段进行分组,然后根据用于分组的各个字段获取其他字段的总和。我想得到一个新的值,需要对求和字段进行除法。我将提供我的当前查询: 在我的查询中,我根据字段a_name对它们进行聚合,并将支出和收益相加。我想得到一个新的领域,这将是总花费/收益的比率 我试着添加脚本,但我得到了NaN,也是为了实现这一点;我必须首先在elasticsearch.yml文件中启用它们 script.engine.groovy.inline.aggs:打开 质疑 这个特定的查询在输出中显

目前,我正在尝试根据一个字段对一个字段进行分组,然后根据用于分组的各个字段获取其他字段的总和。我想得到一个新的值,需要对求和字段进行除法。我将提供我的当前查询:

在我的查询中,我根据字段a_name对它们进行聚合,并将支出和收益相加。我想得到一个新的领域,这将是总花费/收益的比率

我试着添加脚本,但我得到了NaN,也是为了实现这一点;我必须首先在elasticsearch.yml文件中启用它们

script.engine.groovy.inline.aggs:打开

质疑

这个特定的查询在输出中显示一个“NaN”。如果我将除法替换为乘法,查询就会工作

本质上,我正在寻找的是划分我的两个聚合器spe和

谢谢

在某些文档中,doc.gain可能为0。您可以尝试将脚本改为:

"script": "doc['gain'].value != 0 ? doc['spend'].value / doc['gain'].value : 0"
更新

如果要计算其他两个度量聚合结果的比率,可以使用仅在ES 2.0中可用的聚合

{
  ...
  "aggs": {
    "custom_name": {
      "terms": {
        "field": "a_name"
      },
      "aggs": {
        "spe": {
          "sum": {
            "field": "spend"
          }
        },
        "gained": {
          "sum": {
            "field": "gain"
          }
        },
        "bucket_script": {
          "buckets_paths": {
            "totalSpent": "spe",
            "totalGained": "gained"
          },
          "script": "totalSpent / totalGained"
        }
      }
    }
  }
}

你好谢谢你的回复!我可以用bucket_path来划分我的两个聚合器吗?同样,当我使用上面的脚本时,它不会显示所需的值。{key:proxy,doc_count:2325,rati:{value:219.782931785929},获得:{value:389747.8},spe:{value:988445.1700000003}谢谢!我该如何在ES1.6中进行此操作?您可以在客户端进行此操作,即迭代所有自定义的_name bucket,并将每个bucket的spe.value除以goverd.value。是的,这就是我目前正在做的。我正在使用python。谢谢!
{
  ...
  "aggs": {
    "custom_name": {
      "terms": {
        "field": "a_name"
      },
      "aggs": {
        "spe": {
          "sum": {
            "field": "spend"
          }
        },
        "gained": {
          "sum": {
            "field": "gain"
          }
        },
        "bucket_script": {
          "buckets_paths": {
            "totalSpent": "spe",
            "totalGained": "gained"
          },
          "script": "totalSpent / totalGained"
        }
      }
    }
  }
}