【问题标题】:SDN Neo4j Cypher case insensitive querySDN Neo4j Cypher 不区分大小写查询
【发布时间】:2020-01-01 09:32:36
【问题描述】:

我有一个带有 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}
   ^

如何对 name 属性进行正确的不区分大小写的搜索?

【问题讨论】:

    标签: neo4j cypher spring-data-neo4j


    【解决方案1】:

    我知道这有点棘手,但我猜你可以在注释中使用这个查询来做到这一点:

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

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

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

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

    让我知道它是否有效。

    【讨论】:

    • 谢谢,有了LOWER 功能,它就像一个魅力!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多