Cypher Search Query Нечеткий запрос
Я хочу использовать шифр для поиска,
- У меня есть четыре фильма энергии, Форрест, небо, небо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, 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.*")