密码搜索查询模糊查询 [英] Cypher Search Query Fuzzy query

查看:179
本文介绍了密码搜索查询模糊查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用密码搜索

  1. 我有四种电影能量,阿甘,天空,天空1,天空2
  2. 我要搜索天空
  3. 我希望它返回sky,sky1,sky2

我的密码是

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

Neither of those works well: it return forrest, sky,sky1, sky2 no matter what I search (forrest or sky). What is wrong? controller

@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}不会被转换.相反,您应该将查询更改为:

The last time I was doing regular expression matching was in a previous version of Neo4j, at that time you could not construct the regular expression using a parameter in this way. The {0} does not get converted. Instead you should change your query to:

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

并调用:

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

这篇关于密码搜索查询模糊查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆