我想使用密码进行搜索,
- 我有四部电影,《休息》、《天空》、《天1》和《天2》
- 我要搜索天空
- 我要它返回天空,天空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";
}
我上一次进行正则表达式匹配是在Neo4j的早期版本中,当时您无法以这种方式使用参数构造正则表达式。{0}
未转换。相反,您应该将查询更改为:
@Query("MATCH (movie:Movie) WHERE movie.title =~ {0} RETURN movie")
List<Movie> findByTitleLike(String like)
并称之为:
myMovieRepository.findByTitleLike("(?i).*sky.*")