Боюсь, этот вопрос слишком открыт, чтобы дать хороший ответ. Это действительно зависит от ваших целей. Кроме того, вы явно не упомянули, что используете базу данных (в отличие от поиска в памяти), но я предполагаю, что вы используете.
Ваш подход (findEntitiesLikeMe) звучит как приятный и простой подход.
Существует множество языков запросов (JPQL / SQL / и т. Д.), Которые вы можете реализовать (либо санацией запроса и передачей его на нижний уровень, либо непосредственным анализом запроса).
Если структура вашего сервера достаточно древовидная, вы можете использовать XPath и вернуть пространство объектов, соответствующее XPath.
Все три из этих подходов дают вам диапазоны, равенства и исключения. Я бы посоветовал сохранить его простым (то, что у вас хорошо звучит) до тех пор, пока он не сломается (либо из-за производительности, либо из-за сложных API-интерфейсов на стороне клиента, либо из-за отсутствия гибкости), а затем изменить его на что-то лучшее.
В конечном счете, полноценный язык запросов, вероятно, даст вам наибольшую гибкость, но может оказаться наиболее сложным для реализации, особенно если вы анализируете запрос и не передаете его на нижний уровень.