Да, вы можете достичь этого, построив динамический запрос с использованием Criteria API.
Ваша спецификация может выглядеть следующим образом:
Specification<Article> forWords(Collection<String> words) {
if(words == null || words.isEmpty())
throw new RuntimeException("List of words cannot be empty.");
return (root, query, builder) -> words.stream()
.map(String::toLowerCase)
.map(word -> "%" + word + "%")
.map(word -> builder.like(builder.lower(root.get("text")), word))
.reduce(builder::or)
.get();
}
и затем его можно выполнить в JpaSpecificationExecutor<Article>
-подключенном репозитории:
List<String> words = ...; //your logic to get words
List<Article> matches = articleRepository.findAll(forWords(words));