Using a standard analyser will cause this problem. This means they are split into tokens and also lowercased. So, even if it is the same, they are case sensitive and would not match. So, the fix would be to change the tern queries into match queries. Eg:
{
"from": 0,
"size": 300,
"query": {
"bool": {
"filter": {
"match": {
"category": "Cakes"
}
},
"should": [
{"match": {"instructions": "Xxx"}},
{"match": {"introduction": "Xxx"}},
{"match": {"recipe_name": "Xxx"}}
],
"minimum_should_match": 1,
"boost": 1.0
}
}
}