Thanks for your suggestion! The validation API says the following query is valid but I'm still not getting any hits:

    GET migration2/product/_search
    {
      "query": {
        "nested": {
          "path": "variants.attributes",
          "query": {
            "bool": {
              "must": [
                {
                  "terms": {
                    "variants.attributes.id": [204]
                  }
                },
                {
                  "terms": {
                    "variants.attributes.id": [2627]
                  }
                }
              ]
            }
          }
        }
      }
    }

Please note I used some other values to match the resultset. The attributes are also a nested object to variants, but that shouldn't make any difference, right?

This is the response from the explain API:

    {
      "_index": "migration2",
      "_type": "product",
      "_id": "5d25c131748f7d98c589fcfbb68d451e.204",
      "matched": false,
      "explanation": {
        "value": 0,
        "description": "Failure to meet condition(s) of required/prohibited clause(s)",
        "details": [
          {
            "value": 0,
            "description": "no match on required clause (ToParentBlockJoinQuery (+variants.attributes.id:[204 TO 204] +variants.attributes.id:[2627 TO 2627]))",
            "details": [
              {
                "value": 0,
                "description": "Not a match",
                "details": []
              }
            ]
          },
          {
            "value": 0,
            "description": "match on required clause, product of:",
            "details": [
              {
                "value": 0,
                "description": "# clause",
                "details": []
              },
              {
                "value": 1,
                "description": "_type:product, product of:",
                "details": [
                  {
                    "value": 1,
                    "description": "boost",
                    "details": []
                  },
                  {
                    "value": 1,
                    "description": "queryNorm",
                    "details": []
                  }
                ]
              }
            ]
          }
        ]
      }
    }

UPDATED:

This is the document trying to match:

    {
      "_index" : "migration2",
      "_type" : "product",
      "_id" : "5d25c131748f7d98c589fcfbb68d451e.204",
      "_version" : 1,
      "found" : true,
      "_source" : {
        "status" : "draft",
        "variants" : [
          {
            "version" : 1,
            "sku" : "f4e1cd4583811f4e8e37a8c56eb4616c",
            "gtin" : null,
            "attributes" : [
              {
                "id" : 204,
                "type" : "color",
                "name" : "Lilla",
                "version" : 1
              },
              {
                "id" : 2627,
                "type" : "brand",
                "name" : "Nike",
                "version" : 1
              }
            ],
            "attributes_optimized" : {
              "brands" : [
                2627
              ],
              "colors" : [
                204
              ],
              "sizes" : [ ]
            },
            "attributes_array" : [
              2627,
              204
            ]
          }
        ]
      }
    }

Note: there are three different attributes fields because I'm comparing their performances.

---
NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB