ElasticSearch中的复杂嵌套过滤器

时间:2015-08-25 12:51:26

标签: elasticsearch

我有这些数据:

{
    "someKey1" : "someValue1",
    "someKey2" : "someValue2",
    "someKey3" : "someValue3",
    "someKey4" : "someValue4",
    "projectParticipants" : [
        {
            "participant_id" : 1,
            "role_id" : 1
        },
        {
            "participant_id" : 4,
            "role_id" : 2
        },
        {
            "participant_id" : 5,
            "role_id" : 3
        }
    ]
}

我需要查找包含某些角色的项目参与者的项目。例如,我想查找项目,其中第1个角色1 第4个角色2

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您需要使用嵌套映射和查询。 您可以阅读有关嵌套类型here的更多信息。

完成后,您可以执行nested query

因此,在将projectParticipants声明为嵌套在映射中之后,如下所示的查询就足够了 -

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "projectParticipants",
            "score_mode": "avg",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "projectParticipants.participant_id": 1
                    }
                  },
                  {
                    "match": {
                      "projectParticipants.role_id": 1
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "projectParticipants",
            "score_mode": "avg",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "projectParticipants.participant_id": 4
                    }
                  },
                  {
                    "match": {
                      "projectParticipants.role_id": 2
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}