SDN Neo4j Cypher案例insensetive查询

时间:2015-11-14 12:00:18

标签: neo4j cypher spring-data-neo4j

我有一个具有indexed属性name的以下Spring Data Neo4j(3.4.0.RELEASE)实体:

@NodeEntity
public class Decision {

    @Indexed
    private String name;
    ....

我需要name propery实现不区分大小写的搜索。

在我DecisionRepository我创建了以下方法:

@Query("MATCH (d:Decision) WHERE d.name =~ '(?i){name}' RETURN d")
Decision findByNameIgnoreCase(@Param("name") String name);

但在执行后我遇到以下异常:

org.springframework.dao.InvalidDataAccessApiUsageException: Illegal repetition near index 3
(?i){name}
   ^; nested exception is java.util.regex.PatternSyntaxException: Illegal repetition near index 3
(?i){name}
   ^

如何在名称属性上实现正确的不区分大小写的搜索?

1 个答案:

答案 0 :(得分:2)

我知道它有点棘手,但您可以在注释中使用此查询来执行此操作:

MATCH (d:Decision) WHERE LOWER(d.name) = LOWER({name}) RETURN d

如果您将两个名字(参数和值)都设置为较低,则情况并不重要。

要完全按照您的意愿(正则表达式匹配),您必须使用//:

MATCH (d:Decision) WHERE d.name =~ /(?i){name}/ RETURN d

让我知道它是否有效。