Nested object search that doesn't cross boundaries

I’ve got a specific use case in which I’ve got a specific document indexed in search along these lines…

A single document has a list of objects or strings with values along the lines of
[“apple fruit”, “celery vegetable”]

When I search for “apple fruit” or “apple”, I expect the document to return. However, if I were to search for “apple vegetable”, I would not want to do this.

I’ve tinkered around with using query rules for this a few ways…
I indexed it like this…
[“apple fruit”, “apple”, “fruit”, “celery vegetable”, “celery”, “vegetable”]
but when I did this multiple query rules applied when I searched for “apple vegetable”

I also tried using multiple properties with multiple query rules and had the same outcome
property1: [“apple”, “celery”]
property2: [“fruit”, “vegetable”]
property3: [“apple fruit”, “celery vegetable”]

Any help would be much appreciated, thanks.