Cypher Search Query Нечеткий запрос

Я хочу использовать шифр для поиска,

  1. У меня есть четыре фильма энергии, Форрест, небо, небо1, небо2
  2. Я хочу искать небо
  3. Я хочу, чтобы это вернуло небо, небо1, небо2

Мой шифр

@Query("MATCH (movie:Movie) WHERE movie.title =~ '.*{0}.*' RETURN movie")

или же

@Query("MATCH (movie:Movie) WHERE movie.title =~ '(?i).*{0}.*' RETURN movie")

Ни один из них не работает хорошо: он возвращает forrest, sky, sky1, sky2 независимо от того, что я ищу (forrest или sky). Что случилось? контроллер

@RequestMapping(value = "/movies", method = RequestMethod.GET, headers = "Accept=text/html")
public String findMovies(Model model, @RequestParam("q") String query) {
    if (query != null && !query.isEmpty()) {

        List<Movie> movies = movieRepository.findByTitleLike("(?i).*sky.*");

        model.addAttribute("movies", IteratorUtil.asCollection(movies));

    } else {
        model.addAttribute("movies", Collections.emptyList());
    }
    model.addAttribute("query", query);

    return "movies/list";
}

1 ответ

Последний раз, когда я выполнял сопоставление с регулярным выражением, было в предыдущей версии Neo4j, в то время вы не могли создать регулярное выражение, используя параметр таким способом. {0} не конвертируется. Вместо этого вы должны изменить свой запрос на:

@Query("MATCH (movie:Movie) WHERE movie.title =~ {0} RETURN movie")
List<Movie> findByTitleLike(String like)

И назовите это с:

myMovieRepository.findByTitleLike("(?i).*sky.*")
Другие вопросы по тегам