elasticsearch - 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
}
解决方案
因此,鉴于“胜利”的定义是<Driver nationality> result
== 1,您可以使用此查询
{
"query": {
"script": {
"script": "def nat = doc['Nationality'].value; return doc[nat + ' result'].value == 1"
}
}
}
推荐阅读
- ruby-on-rails - 在多个条件下使用 max_by 的有效方法
- azure - 如何从ansible playbook将参数数组传递给azure vm powershell扩展?
- javascript - 使用 React Hooks 更新状态数组
- linux - cscope 无法正常工作以进行模块外开发
- python - Seaborn 在自定义 pairgrid 中增加标题字体大小
- c# - 除非预先单击单元格,否则 DataGridCell ContextMenu 会引发 ArgumentNullException
- python - 连接 django 和 mysql 时出现 OperationalError
- arrays - 循环函数向变量添加不准确的值,并且在跟踪代码时未定义数组。怎么修?
- prolog - prolog中如何实现逻辑运算符
- string - 将数字转换为字符串以保持排序顺序