Просто используйте два сравнения:
select *
from dept
where loc like '%o%' and loc not like '%o%o%';
Обратите внимание, что Oracle, как правило, чувствителен к регистру, поэтому я бы рекомендовал:
select *
from dept
where lower(loc) like '%o%' and loc not like '%o%o%';
Вы сравниваете яблоко с апельсином, если сравниваете GraphQL с ElasticSearch. Это совершенно разные технологии.
GraphQL - это технология уровня API, которая сравнивается с REST. Он в основном определяет формат запроса / ответа и структуру вашего HTTP на основе API. Это не другой NoSQL, который поможет вам эффективно хранить и запрашивать данные.
Если вы используете GraphQL, вам все равно нужно самостоятельно запрашивать данные, которые могут фактически храниться и поступать из NoSQL, SQL DB, ElasticSearch или другого веб-сервиса или блаблабла. GraphQL не заботится о том, где вы храните данные, данные могут даже храниться в нескольких источниках данных. Его волнует, что вы говорите ему, как получить данные.
Вернемся к вашему случаю. Скорее всего, вы можете использовать ElasticSearch для эффективного хранения и поиска данных. И поместите GraphQL перед ElasticSearch так, чтобы пользователи / разработчики взаимодействовали со службой через GraphQL API, чтобы воспользоваться преимуществами GraphQL .