Elastic search query to return documents matching all elements in an array

I have a structure similar to this:

Document 1:

nestedobject: {

uniqueid: "12345",

field: [ {id: 1,

      color: blue,

     fruit:banana},

{id: 2,

      color: red,

fruit:apple},

]

}

Document 2: (in same index)

nestedobject: {

uniqueid:23456,

field: [ {id: 3,

      color: blue, 

fruit:banana},

{id: 4,

      color: blue,

fruit:banana},

]

}

the field mappings can be seen as :

{"mappings":

"nestedobject":{

"properties":{

"uniqueid":{

"type":"text",

"fields":{

"keyword":{

"type":"keyword",

"ignore_above":256

}

}

}

"field":{

"type":"nested",

"id":{

"type":"text",

"fields":{

"keyword":{

"type":"keyword",

"ignore_above":256

}

}

},

"color":{

"type":"text",

"fields":{

"keyword":{

"type":"keyword",

"ignore_above":256

}

}

},

"fruit":{

"type":"text",

"fields":{

"keyword":{

"type":"keyword",

"ignore_above":256

}

}

}

}

}

}

}

Now, I try to query this index with 2 documents and I want only the document which has all the elements in the field array with color blue and fruit as banana - NOT ATLEAST 1.

Right now, with the query, I get returned both the documents as it matches with the first element of the first document and returns that.

How to make this possible?

{

"query": {

    "nested" : {

        "path" : "nestedobject.field",

        "query" : {

            "bool" : {

                "must" : [

                { "match" : {"nestedobject.field.color" : "blue"} },

                { "match" : {"nestedobject.field.fruit" : "banana"}}

                ]

            }

        }

    }

}

}

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.