Cypher搜索查询模糊查询

时间:2015-04-08 04:11:03

标签: neo4j cypher spring-data-neo4j anormcypher

我想使用cypher进行搜索,

  1. 我有四部电影,包括forrest,sky,sky1,sky2
  2. 我想搜索天空
  3. 我希望它返回sky,sky1,sky2
  4. 我的密码是

    @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。 怎么了? 控制器

    @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 个答案:

答案 0 :(得分:1)

我最后一次进行正则表达式匹配是在Neo4j的先前版本中,那时你无法以这种方式使用参数构造正则表达式。 {0}未转换。相反,您应该将查询更改为:

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

并将其命名为:

myMovieRepository.findByTitleLike("(?i).*sky.*")