SDN Neo4j Cypher不区分大小写的查询

问题描述 投票:1回答:1

我有一个后续的带有indexed属性name的Spring Data Neo4j(3.4.0.RELEASE)实体:

@NodeEntity
public class Decision {

    @Indexed
    private String name;
    ....

我需要通过name属性实现不区分大小写的搜索。

在我的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}
   ^

如何对名称属性实施正确的不区分大小写的搜索?

neo4j cypher spring-data-neo4j
1个回答
2
投票

我知道这有点棘手,但是我可以在注释中使用此查询来完成此操作:

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

如果将两个名称(参数和值)都设置为小写,则大小写无关紧要。

要精确执行所需的操作(正则表达式匹配),必须使用//:

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

让我知道它是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.