@DeNissss4444

Как сделать что бы поиск в Spring искал по одному слову в названии а не по полному названии?

Написал поиск для сайта на Spring. Поиск ищет статью по её названию, но он ищет только по точному названию а мне нужно что бы он находил её даже если есть слово введенное в поиске в названии статьи. К примеру если у меня есть статья "Почему земля круглая?", сейчас он найдет эту статью, если в поиск вписать "Почему земля круглая?", но если вписать просто слово "Почему" у меня ничего не найдет. Подскажите пожалуйста как мне сделать, что бы находило по слову в названии.

Мой репозиторий
public interface PostRepository extends JpaRepository<Post, Long> {
     Iterable<Post> findByTitle(String title) throws Exception;
}


Мой сервис написанный под этот репозиторий (кстати подскажите нормально что я его сделал абстрактным что бы реализовать в нем только findByTitle ?)
@Service
public abstract class PostService implements PostRepository {

    public PostRepository postRepository;

    @Override
    public Iterable<Post> findByTitle(String title) throws Exception {
        Iterable<Post> searchResult = postRepository.findByTitle(title);
        if(searchResult != null){
            throw new Exception("Пост не найден");
        }

        return searchResult;
    }
}


Мой контроллер
@Controller
public class SearchController {

    @Autowired
    PostRepository postRepository;

    @GetMapping("/search")
    public String searchPage(){
        return "/search";
    }

    @PostMapping("search")
    public String searchPage(@RequestParam("searchString") String searchString, Model model){
        if(searchString != null){
            try {
                Iterable<Post> searchResult = postRepository.findByTitle(searchString);
                model.addAttribute("searchResult", searchResult);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return "search";
    }
}
  • Вопрос задан
  • 568 просмотров
Решения вопроса 2
@askar98
findByTitleContains в repository
Ответ написан
Комментировать
@DeNissss4444 Автор вопроса
Все разобрался, во первых абстрактный метод который имлемитирует мой репозиторий вообще не нужен, потому что по факту он ничего не делает. Все выполняет сам репозиторий, надо было лучше мне читать как репозиторий вообще работает.
Во вторых что бы реализовать поиск как я хотел надо
Iterable<Post> findByTitleContainingIgnoreCase (String title);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы