I have an index in elasticsearch where the body contains an array of a field with an array of values. For example :
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1,
"hits": [
{
"_index": "families",
"_type": "family",
"_id": "o8qxd2EB9CizMt-k15mv",
"_score": 1,
"_source": {
"names": [
"Jefferson Erickson",
"Bailee Miller",
"Ahmed Bray"
]
}
},
{
"_index": "families",
"_type": "family",
"_id": "osqxd2EB9CizMt-kfZlJ",
"_score": 1,
"_source": {
"names": [
"Nia Walsh",
"Jefferson Erickson",
"Darryl Stark"
]
}
},
{
"_index": "families",
"_type": "family",
"_id": "pMrEd2EB9CizMt-kq5m-",
"_score": 1,
"_source": {
"names": [
"lia shelton",
"joanna shaffer",
"mathias little"
]
}
}
]
}
}
Now I need a search query in which I can search for documents from an array of values, something like this:
GET /families/_search
{
"query" : {
"bool" : {
"filter" : {
"bool" : {
"should" : [
{"match_phrase" : {"names" : ["ahmed bray", "nia walsh"]}}
]
}
}
}
}
}
And it should return the 2 documents that contain these names like this:
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0,
"hits": [
{
"_index": "families",
"_type": "family",
"_id": "o8qxd2EB9CizMt-k15mv",
"_score": 0,
"_source": {
"names": [
"Jefferson Erickson",
"Bailee Miller",
"Ahmed Bray"
]
}
},
{
"_index": "families",
"_type": "family",
"_id": "osqxd2EB9CizMt-kfZlJ",
"_score": 0,
"_source": {
"names": [
"Nia Walsh",
"Jefferson Erickson",
"Darryl Stark"
]
}
}
]
}
}
How do i make a query like this? I tried using the "terms" keyword but "terms" only allows me to search from an array on single words like this:
{"terms" : {"names" : ["bray", "nia"]}}
But I need to look using the full names like this:
{"names" : ["ahmed bray", "nia walsh"]}}