Все виды запросов - Scan, SQL и Text - независимы друг от друга. Вы не можете напрямую использовать SQL поверх результата текстового запроса.
Вы можете попытаться выполнить локальные текстовые запросы на всех узлах, а затем отфильтровать результаты вручную (не используя SQL, а просто код Java). Э.Г.
Collection<List<Cache.Entry<Object, Object>>> results = ignite.compute().broadcast(() -> {
IgniteCache<Object, Object> cache = Ignition.localIgnite().<Object, Object>cache("foo");
TextQuery<Object, Object> qry = new TextQuery<Object, Object>(Value.class, "str").setLocal(true);
try (QueryCursor<Cache.Entry<Object, Object>> cursor = cache.query(qry)) {
return StreamSupport.stream(cursor.spliterator(), false)
.filter(e -> needToReturnEntry(e))
.collect(Collectors.toList());
}
});
List<Cache.Entry<Object, Object>> combinedResults = results.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
needToReturnEntry(e)
здесь необходимо реализовать такую же фильтрацию, как и ограничения SQL.
Другой способ - получить список первичных ключей из текстового запроса, а затем добавить его в запрос SQL. Это будет работать, если количество клавиш не слишком велико.
select * from TABLE where pKey in (<keys from Text Query>) and <other constraints>