Check the analyzer for this field, I believe its set to Standard or so.
Therefore your content is broken down into words representing tokens, and common verbs like '&' is not considered as a token/key while aggregating.
Elastic search indexes your documents with these tokens('recruitment', 'consultants').
Thus according to the primary functionality of elastic-search, this behavior is as expected;
That is, when searching by a keyword 'consulting', ES would then return the documents with relevant score or in simple words containing the keyword 'consulting'.
If you insist of getting "Consulting & Recruitment" as a whole key or token, then you need to stop the tokenizer from splitting it into multiple terms.
Check for pattern tokenizer, to customize the way you split these into different tokens.
Its like designing a tokenizer to consider "Consulting & Recruitment" as one big word, but then your tokens would not be well defined and hence your search might suffer.
One solution is that you can change the format of your data, use a industry-type-code representing each industry and have another field as industry-name to have your text content.
Index the document with the field industry-type-code as tokenised/standard, and the field industry-name as another additional one.
For normal search operations use the field industry-name , for aggregation use the field industry-type-code.
{
"mappings": {
"industries" : {
"properties" : {
"industry-type-code" : {
"type" : "string",
"analyzer": "standard"
},
"industry-name" : {
"type" : "string",
"analyzer": "standard"
}
}
}
}
}