ElasticSearch - 查询文档:所有给定标签在嵌套文档

时间:2016-08-24 00:13:08

标签: search elasticsearch

考虑一些包含嵌套文档(技能)的索引文档( employees ),其中包含一个属性,比如说“ label ”,这样每个员工都与一些技能相关联。我想从ElasticSearch索引中获取所有员工(文档),他们掌握了一组给定的技能,例如“ Python ”和“ Java ”。

我正在努力找到一个合适的查询,以确保所有给定的技能(“Python”,“Java”)在的技能组合中出现至少一次一名员工,虽然他们必须一起出现!

我的映射与此类似:

{
  "mappings": {
    "employee": {
      "_all": { "enabled": false },
      "properties": {
        "id" : { "type": "integer" },
        "first_name" : { "type": "string" },
        "last_name" : { "type": "string" },

        "skills": {
          "type": "nested",
          "properties": {
            "label": { "type": "string" },
            "rating": { "type": "integer" }
          }
        }

      }
    }
  }
} 

所以我正在寻找有关如何检索所需结果的任何解决方案(查询)。

1 个答案:

答案 0 :(得分:1)

您需要在nested查询中使用两个 bool/filter过滤器,如下所示:

POST /employees/employee/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "skills",
            "query": {
              "term": {
                "skills.label": "python"
              }
            }
          }
        },
        {
          "nested": {
            "path": "skills",
            "query": {
              "term": {
                "skills.label": "java"
              }
            }
          }
        }
      ]
    }
  }
}