我有两个字段,让我们在我的文档中命名它们为"fieldA"one_answers"fieldB",我需要找到它们之间的差异,并检查该值是否属于特定范围,例如"rangeA"或" rangeB",然后返回符合我的标准的文档。数据的模式如下所示:
{
"fieldA": 45
"fieldB":13
}
我需要找到"fieldA"one_answers"fieldB"之间的差异在30和35之间的所有文档。我怎么能做到这一点使用脚本在elasticsearch?
这也可以使用下面的聚合和脚本来完成:
{
"aggregations": {
"age_diff": {
"range": {
"script": "doc["fieldA"].value - doc["fieldB"].value",
"ranges": [
{
"from": 30,
"to": 35
}
]
}
}
}
}
这样您就可以检查有多少文档属于指定的范围。但是如果你想在聚合下获取文档,你可以使用"top_hits"聚合。
关于聚合的更详细的讨论可以在这里找到,更多关于"top_hits"的详细信息可以在这里找到
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "difference=doc['fieldA'].value-doc['fieldB'].value;return (difference>param1 && difference<param2);",
"params": {
"param1":30,
"param2":35
}
}
}
}
}
}