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

获取嵌套字段的最大值小于参数值的项,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我在elasticsearch中有以下映射: "mappings": { "company": { "properties": { "name": { "type": "keyword" }, "employee": { "type": "object", "properties": { "age": { "type": "long" }

我在elasticsearch中有以下映射:

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

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

在您的情况下,这很简单。因为每个公司只有一个文档,所以您永远不会得到重复的公司,所以您可以直接进行搜索。例如:

GET yourindex/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"range": {
          "employee.age": {
            "gt": 30
          }
        }}
      ]
    }
  }
}
值得一提的是,如果您想要进行合并员工字段的搜索,您可能会遇到问题。例如,如果要搜索所有员工年龄
小于30岁且性别=男性的公司,此模型将崩溃。默认情况下,ElasticSearch将所有字段视为独立字段。这意味着该查询将返回至少有一名男性员工和一名30岁以下员工的公司。你无法说他们一定是同一个人。如果需要执行这些类型的查询,则需要查看嵌套的映射和查询,这将稍微改变上面的查询

详细信息:

您是在ES中为每个员工创建一个文档,还是在“员工”字段中为每个有多个员工的公司创建一个文档?我为每个有多个员工的公司创建一个文档!我需要嵌套查询,但您的推荐确实帮了我很大的忙。所以我接受了答案!如果需要嵌套查询,请不要忘记,在索引任何数据之前,还需要在映射中将字段标记为“嵌套”而不是“对象”