可以针对其所有元素都必须满足某些条件的数组字段进行 ElasticSearch 查询

is possible to make a ElasticSearch query against a array field that all its elements must satisfy some condition

我正在使用 ElasticSearch,并且有一个数字数组字段,如下所示。

{
  income: [200, 300, 400]
}

我需要编写一个查询来查找其收入的所有元素都大于某个值的文档。 例如,如果条件是

> 250

那么上面的文档应该不会被命中,因为200小于250。 但如果条件是

> 150

那么文件应该被归还。

您可以通过遍历数组字段并检查所需条件的脚本查询来执行此操作。 在上述情况下,以下是 queryDsl

GET testample/_search
{
  "query": {
    "script": {
      "script": {
        "source": " boolean test = false; for (inc in doc['income']) { if(params.income<=inc) { test=true; } else { test=false; break;} } return test;",
        "params": {
          "income": 150
        }
      }
    }
  }
}

基本上您可以在脚本部分执行任何代码。上面的查询所做的是,它将用户输入作为参数,然后检查它是否小于数组中的所有元素,如果是,则文档评估为真,因此作为查询响应返回。