See my response to a similar question
In the context of queries on nested structures, an element in the "specs" array can either match "Tornillo" or "Dorado" but not both.
Try what I suggested in the other question, i.e. use the inner_hits object to determine if the count of matched elements is 2. Only the records where it is 2 are valid results.
{
"query": {
"nested": {
"path": "specs",
"query": {
"bool": {
"filter": [{
"terms": {
"specs.value": [
"Tornillo", "Dorado"
]
}
}
]
}
},
"inner_hits": {}
}
}
}