0

我想用密码搜索,

  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),它都会返回 forrest、sky、sky1、sky2。怎么了?控制器

@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";
}
4

1 回答 1

1

上一次做正则表达式匹配是在之前的Neo4j版本中,当时你无法通过这种方式使用参数构造正则表达式。{0}不会转换。相反,您应该将查询更改为:

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

并调用它:

myMovieRepository.findByTitleLike("(?i).*sky.*")
于 2015-04-09T09:07:55.807 回答