要找到两个整数字段之间的差异,并使用elasticsearch中的脚本检查它是否属于特定范围

时间:2015-06-04 17:53:47

标签: elasticsearch

我有两个字段,让我们在我的文档中将它们命名为“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中使用脚本执行此操作?

2 个答案:

答案 0 :(得分:2)

这也可以使用如下的聚合和脚本来完成:

{
   "aggregations": {
      "age_diff": {
         "range": {
            "script": "doc[\"fieldA\"].value - doc[\"fieldB\"].value",
            "ranges": [
               {
                  "from": 30,
                  "to": 35
               }
            ]
         }
      }
   }
}

通过这种方式,您只需检查指定范围内的文档数量。但是,如果您想获取聚合下的文档,可以使用“top_hits”聚合。

可以找到关于聚合的更详细讨论here,可以详细了解“top_hits”here

答案 1 :(得分:1)

{
  "query": {
    "filtered": {
      "filter": {
        "script": {
          "script": "difference=doc['fieldA'].value-doc['fieldB'].value;return (difference>param1 && difference<param2);",
          "params": {
            "param1":30,
            "param2":35
          }
        }
      }
    }
  }
}