首页 > 解决方案 > Elasticsearch如何计算索引中所有文档的多个字段中的特定值?

问题描述

我的 ES 指数中有 WRC 排名。每个驱动程序都有自己的文档。 在此处输入图像描述

此索引的映射:

`{
  "properties" : {
    "Argentina pts" : {
      "type" : "long"
    },
    "Argentina result" : {
      "type" : "long"
    },
    "Chile pts" : {
      "type" : "long"
    },
    "Chile result" : {
      "type" : "long"
    },
    "Driver" : {
      "type" : "keyword"
    }
    "Nationality" : {
      "type" : "keyword"
    }
    "Team" : {
      "type" : "keyword"
    },
    "Total" : {
      "type" : "long"
    },
    "Position" : {
      "type" : "long"
    }`

示例文档:

"_source" : {
      "Argentina pts" : 30,
      "Argentina result" : 1,
      "Chile pts" : 30,
      "Chile result" : 1,
      "Driver" : "O. TANAK",
      "Nationality" : "Estonia",
      "Team" : "Toyota",
      "Total" : 263,
      "Position" : 1,

    }

问题

如何根据result领域计算车手获胜次数?我尝试了不同的查询和/或聚合,但我得到的最接近的结果是在赛季中至少赢得一场胜利的车手(我用于multi_match此)。我没有在 Stack 或 Elastic 文档中找到答案。我不知道如何通过多个字段“垂直”搜索文档并对选定字段进行聚合。

编辑

我只想为每个车手计算result等于 1 的字段。例如,如果车手在摩纳哥获胜(Monaco result=1),查询/脚本将增加他的获胜计数器。

示例响应

{
"Driver" : "a",
"Win count": 3
},
{
"Driver" : "b",
"Win count": 2
},
{
"Driver" : "c",
"Win count": 1
}

标签: elasticsearch

解决方案


因此,鉴于“胜利”的定义是<Driver nationality> result== 1,您可以使用此查询

{
  "query": {
    "script": {
      "script": "def nat = doc['Nationality'].value; return doc[nat + ' result'].value == 1"
    }
  }
}

推荐阅读