我有两个字段,让我们在我的文档中将它们命名为“fieldA”和“fieldB”,我需要找到它们之间的区别,并检查该值是否属于特定范围,例如“rangeA”或“rangeB”,然后返回符合我标准的文档。 数据架构如下所示:
<a href="https://getpocket.com/edit.php?url=http://www.example.com/myPage.html">Save to Pocket</a>
我需要在30到35之间找到“fieldA”和“fieldB”之间有区别的所有文档。如何在elasticsearch中使用脚本执行此操作?
答案 0 :(得分:2)
这也可以使用如下的聚合和脚本来完成:
{
"aggregations": {
"age_diff": {
"range": {
"script": "doc[\"fieldA\"].value - doc[\"fieldB\"].value",
"ranges": [
{
"from": 30,
"to": 35
}
]
}
}
}
}
通过这种方式,您只需检查指定范围内的文档数量。但是,如果您想获取聚合下的文档,可以使用“top_hits”聚合。
答案 1 :(得分:1)
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "difference=doc['fieldA'].value-doc['fieldB'].value;return (difference>param1 && difference<param2);",
"params": {
"param1":30,
"param2":35
}
}
}
}
}
}