2015-04-08 1 views
0

Je veux utiliser Cypher pour rechercher,Cypher Rechercher requête floue

  1. J'ai quatre enerties de cinéma, forrest, ciel, Sky1, sky2
  2. Je veux chercher ciel
  3. Je veux retourne ciel , Sky1, sky2

Mon Cypher est

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

ou

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

Aucune de ces œuvres bien: le retourner forrest, ciel, Sky1, sky2 peu importe ce que je cherche (ou forrest ciel). Qu'est-ce qui ne va pas? contrôleur

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

Répondre

1

La dernière fois que je faisais correspondance d'expression régulière était dans une version précédente de Neo4j, à ce moment-là on ne pouvait pas construire l'expression régulière à l'aide d'un paramètre de cette façon. Le {0} n'est pas converti. Au lieu de cela, vous devriez changer votre requête:

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

Et appelez avec:

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

ce mot, mais je veux faire le ciel variable, ce shoud je fais? – yang

+0

Bien @yang très simplement '.findByTitleLike (" (? I). * "+ Query +". * ")', Mais faites mieux que ça. – JohnMark13