I read about Spring Data JPA and find out that to write custom query, we can use Criteria API, but it seems like this API don't have full-text search. Any can help me implement this in a Spring Boot project ?
Asked
Active
Viewed 509 times
1 Answers
0
You do it by using specification API.
- Create specification.
@Component
public class PostSpecification {
public static Specification<Post> search(String keyword) {
return ((root, criteriaQuery, criteriaBuilder) -> {
criteriaQuery.distinct(true);
if (keyword == null) {
return null;
}
return criteriaBuilder.or(
criteriaBuilder.like(root.get("title"), "%" + keyword + "%"),
criteriaBuilder.like(root.get("content"), "%" + keyword + "%"),
criteriaBuilder.like(root.get("excerpt"), "%" + keyword + "%"),
criteriaBuilder.equal(root.join("author").get("name"), keyword),
criteriaBuilder.equal(root.join("tags").get("name"), keyword.trim().toUpperCase())
);
});
}
}
- Create Reposiotory
@Repository
public interface PostRepository extends JpaRepository<Post, Long>, JpaSpecificationExecutor<Post> {
}
Below method will return List<Post>
with contains the keyword.
postRepository.findAll(PostSpecification.search(keyword));
Keyword will be searched in specified columns.

krishnkant jaiswal
- 535
- 3
- 9