neo4j逃避正则表达式

时间:2016-03-29 23:03:10

标签: java regex neo4j escaping

我收到了一个用户输入keyword,想要用它来搜索我的数据库。我构建了一个看起来像这样的查询:

db.execute("MATCH (n:User) WHERE n.firstname CONTAINS {keyword} OR n.lastname CONTAINS {keyword} RETURN n.username", params);

但这不是区分大小写的,所以我想到手动构建表达式并使用正则表达式,如下所示:

db.execute("MATCH (n:User) WHERE n.firstname =~ '(?i).*" + keyword + ".*' OR n.lastname =~ '(?i).*" + keyword + ".*' RETURN n.username");

我正在寻找一个用于转义正则表达式的函数或一个更好的解决方案,以使查询不区分大小写。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我建议将属性存储为全小写(或大写),然后使用Cypher lower()函数将用户输入转换为小写进行比较。

添加小写名称属性

MATCH (n:User)
SET n.lowerFirstName = lower(n.firstname),
    n.lowerLastName = lower(n.lastname)

根据用户输入查找小写匹配

db.execute("MATCH (n:User) WHERE n.lowerFirstName CONTAINS lower({keyword}) OR n.lowerLastName CONTAINS lower({keyword}) RETURN n.username", params);