neo4j - 数据不像 Neo4j 中的搜索那样进入

标签 neo4j cypher

我没有像搜索一样获取数据,而对于相同的字符串,我获取的是完全匹配的数据。我的搜索字符串以特殊字符开头。

查询字符串是:

match (n:Details) where n.Name='$$$$Swaraj' return n; //This is working
match (n:Details) where n.Name=~ '(?i).*$$$$Swaraj.*' return n;    //This is not working

查询中的问题是什么? 提前致谢。

最佳答案

那是因为$在正则表达式中是一个有特殊含义的字符。我不知道 Neo4j 在哪里记录了 Cypher 正则表达式语法(在 few examples in the manual 之外)。一个合格的猜测是 $ 表示“行尾”,如果你想匹配文字 $ 那么你需要转义它。我尝试使用转义的 $ 进行查询,但该查询失败了。

MATCH (n:Details) 
WHERE n.Name =~ '(?i).*\$Swaraj' 
RETURN n;
Error: Invalid input '$': expected '\', ''', '"', 'b', 'f', 'n', 'r', 't', UTF16 or UTF32 (line 1, column 44 (offset: 43))
"MATCH (n:Details)  WHERE n.Name =~ '(?i).*\$Swaraj'  RETURN n;"

如果我对它进行两次转义,则查询有效。

Query:
MATCH (n:Details)
WHERE n.Name =~ "(?i).*\\$Swaraj"
RETURN n;

返回

n
(6:Details {Name:"$$$$Swaraj"})

两个注意事项:

1) 尝试找到记录 Cypher 的正则表达式语法的位置,否则您将在黑暗中猜测。它可能与 Scala 的语法相同,因为 Cypher 是用 Scala 编写的吗?如果您找不到 Cypher 的正则表达式语法的文档,您可以尝试 Scala 的——至少您会在黄昏时猜测。

2) 最后一个查询,带有双重转义的 $,运行并有效,但是当它显示执行的查询和结果时,它显示只有一个 \< 的查询。网上确实如此console为我编辑或执行而填写的查询也是如此——所以如果我再次运行查询而不做任何更改,它就会中断。

MATCH (n:Details)
WHERE n.Name =~ '(?i).*\$Swaraj'
RETURN n;

这意味着有问题,不仅是您的正则表达式,还有查询的解析方式。这可能只是 web 应用程序中的一个小错误(我目前没有服务器实例可以尝试)并且可能除了混淆之外没有任何影响,但如果您在正则表达式中遇到转义问题,请注意它 future 。

编辑

This tutorial包含一个有用的正则表达式原子列表和 Scala 示例,这显然与 Java 相同。

它还提到了双重转义:

Note that every backslash appears twice in the string above. This is because in Java and Scala a single backslash is an escape character in a string literal, not a regular character that shows up in the string. So instead of .\. you need to write .\\. to get a single backslash in the string.

注意我仍然不知道 Cypher 使用 Scala/Java 正则表达式这一事实。我认为这很有可能,但我不知道。

关于neo4j - 数据不像 Neo4j 中的搜索那样进入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31805662/

相关文章:

Java - 检查索引是否已经存在 neo4j(if 子句)

csv - 从只有 MATCH & CREATE 关系的 Cypher LOAD CSV 中删除 EAGER

java - 将海量数据集导入 Neo4j 非常慢

csv - Cypher Neo4j无法加载外部资源

java - 非托管扩展 Neo4j 上的密码查询

java - org.apache.lucene.store.LockObtainFailedException : Lock obtain timed out: NativeFSLock@/var/database/schema/label/lucene/write. 锁

java - 不知道如何减法和不知道如何比较 Java 中的错误 Cypher 查询

Neo4j密码查询顺序由收集

php - 将 Neo4j DB 与 Laravel 5 集成

php - 我可以在 neo4j 中创建一个指定 id 的节点吗?