获取嵌套字段的最大值小于参数值的项目

Get items whose maximal values of nested field less than a parameter value

我在 elasticsearch 中有以下映射:

"mappings": {
  "company": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "employee": {
        "type": "object",
        "properties": {
          "age": {
            "type": "long"
          }
        }
      }
    }
  }
}

我想知道是否有可能获得员工年龄最大值小于 30 岁的所有公司。在 SQL 中,我只需要 select 公司同时加入员工和按公司 ID 分组并创建年龄最大值小于 30 的 where 子句。

对于您的情况,这很容易。因为你永远不会得到重复的公司的回报,因为你只有每个公司的文件,你可以直接搜索。示例:

GET yourindex/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"range": {
          "employee.age": {
            "gt": 30
          }
        }}
      ]
    }
  }
}

值得注意的是,如果您想进行合并员工字段的搜索,您可以 运行 进入问题。例如,如果您要搜索所有拥有 age < 30 AND gender=MALE 员工的公司,此模型将失效。默认情况下 ElasticSearch 将所有字段视为独立的。这意味着该查询将 return 任何至少拥有一名男性员工和一名 30 岁以下员工的公司。你无法说他们一定是同一个人。如果您需要执行这些类型的查询,则需要查看 嵌套 映射和查询,这会稍微改变上面的查询。

详情: https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html