在弹性搜索中过滤掉分支

Filter out branches in elastic search

我想在 elastic search 2.4 中过滤一些数据。 更具体地说,我只想考虑 'island' 标签下的记录。
如果我这样过滤:

filter : [{term: {Artists.Artist.Records.label : "Island"}}] 

我会失去 Miles,但保留另外两个,因为它们有岛屿标签。这很好,但我想丢失 所有 none 岛屿记录,但仍保留顶部的所有数据。

如此给出:

{
  "Artists": [
    {
      "Artist": "Tom Waits",
      "Records": [
        {
          "id": 1,
          "title": "Rain dogs",
          "label": "Island"
        },
        {
          "id": 2,
          "title": "SwordFishTrombones",
          "label": "Island"
        },
        {
          "id": 3,
          "title": "Bone Machine",
          "label": "ANTI"
        }
      ]
    },
    {
      "Artist": "dEUS",
      "Records": [
        {
          "id": 112,
          "title": "Worst Case Scenario",
          "label": "Island"
        },
        {
          "id": 2213,
          "title": "Keep you close",
          "label": "Universal"
        }
      ]
    },
    {
      "Artist": "Miles",
      "Records": [
        {
          "id": 42,
          "title": "Kind of blue",
          "label": "columbia"
        }
      ]
    }
  ]
}

我想结束:

{
  "Artists": [
    {
      "Artist": "Tom Waits",
      "Records": [
        {
          "id": 1,
          "title": "Rain dogs",
          "label": "Island"
        },
        {
          "id": 2,
          "title": "SwordFishTrombones",
          "label": "Island"
        }
      ]
    },
    {
      "Artist": "dEUS",
      "Records": [
        {
          "id": 112,
          "title": "Worst Case Scenario",
          "label": "Island"
        }
      ]
    }
  ]
}

这可能吗?谢谢!

我相信这可以通过内部点击功能来实现。您的查询看起来像这样:

{
  "query": {
    "filtered": {
      "query": {"match_all": {}},
      "filter": {
        "nested": {
          "path": "Artists.Artist.Records",
          "filter": {
            "term": {
              "Records.label": "Island"
            }
          }, 
          "inner_hits" : {}
        }
      }
    }
  }
}