elasticsearch Elasticsearch-按大于特定值的多个字段之和进行筛选
我想用(attempt1+attempt2+attempt3)>99筛选文档 预期结果
elasticsearch Elasticsearch-按大于特定值的多个字段之和进行筛选,
elasticsearch,
elasticsearch,我想用(attempt1+attempt2+attempt3)>99筛选文档 预期结果 { "name": "tom", "attempt1": 30, "attempt2": 30, "attempt3": 40 } { "name": "jerry", "attempt1": 20, "attempt2": 10, "attempt3": 20 } { "name": "cat", "attempt1": 80, "attempt2": 90, "attempt3": 10 } { "nam
{ "name": "tom", "attempt1": 30, "attempt2": 30, "attempt3": 40 }
{ "name": "jerry", "attempt1": 20, "attempt2": 10, "attempt3": 20 }
{ "name": "cat", "attempt1": 80, "attempt2": 90, "attempt3": 10 }
{ "name": "mouse", "attempt1": 30, "attempt2": 30, "attempt3": 30 }
在弹性搜索中,有什么方法可以做到这一点吗?基本方法是使用如下方法:
{ "name": "tom", "attempt1": 30, "attempt2": 30, "attempt3": 40 }
{ "name": "cat", "attempt1": 80, "attempt2": 90, "attempt3": 10 }
如果在大量文档上运行上述查询,请确保添加尽可能多的约束,以减少脚本需要运行的文档集
正确的方法是预先计算总和并将其索引到另一个字段中,以便可以在该新字段中使用。根据您拥有的文档数量,它会更为优化 您的解决方案在@Val上运行得非常好。我尝试了函数_score,但认为它做得不对。这是非常简单和有效的。很好,很高兴它成功了!你仍然应该考虑预先计算这些值。
GET index/_search
{
"query": {
"bool" : {
"filter" : {
"script" : {
"script" : {
"source": "doc['attempt1'].value + doc['attempt2'].value + doc['attempt3'].value > params.threshold",
"lang": "painless",
"params": {
"threshold": 99
}
}
}
}
}
}
}