0

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 ?

Neoflies
  • 263
  • 1
  • 3
  • 7

1 Answers1

0

You do it by using specification API.

  1. 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())
            );
        });
    }

}
  1. 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.