CYPHER查询中的LIKE子句

joh*_*hnc 52 neo4j cypher

Cypher查询似乎不支持LIKE.

是否有任何其他构造可以执行相同的任务?

例如:

start n = node(*) where n.Name LIKE('%SUBSTRING%') return n.Name, n;
Run Code Online (Sandbox Code Playgroud)

ulk*_*kas 63

使用正则表达式:http: //neo4j.com/docs/developer-manual/current/#query-where-regex

start n = node(*) where n.Name =~ '.*SUBSTRING.*' return n.Name, n;
Run Code Online (Sandbox Code Playgroud)

  • 请使用参数而不是文字值:`start n = node(*)其中n.Name =〜{like} return n.Name,n;`params:{"like":".*SUBSTRING.*"}, node(*)as start子句提示非图用例,然后使用ulkas'索引查找建议 (4认同)
  • 我担心正则表达式可能就是答案.呻吟;)然而,它使它比简单的LIKE更强大 (3认同)
  • 是的,我也关注regexp但它现在是直接的方式.但你仍然可以像这样使用lucene索引:`start n = node:your_index('property:*SUBSTRING*')return n.name,n;` (2认同)
  • 似乎它不能使用".*SUBSTRING.*"但只能使用"^.*SUBSTRING.*$" (2认同)

Rya*_*lls 22

从2.0版开始,首选语法使用MATCH.

例如

MATCH (n) where n.Name =~ '.*SUBSTRING.*' return n.Name, n;
Run Code Online (Sandbox Code Playgroud)


小智 17

不需要正则表达式:

start n = node(*) where n.Name contains "substring" return n.Name, n;
Run Code Online (Sandbox Code Playgroud)

转到cypher refcard并向下滚动到Predicates部分.你会发现这个和其他有用的东西.

想要不区分大小写?转换为小写:

start n = node(*) where lower(n.Name) contains lower("substring") return n.Name, n;
Run Code Online (Sandbox Code Playgroud)

  • 是的,这会起作用,就像 `=~ '(?i)substring'` 一样,但它的性能不佳。lower() 会阻止索引的使用,因此在大数据上它会挂起。我在这里有一个开放的功能请求:https://github.com/neo4j/neo4j/issues/9450 (2认同)

小智 15

如果你想让它不区分大小写

MATCH (n) WHERE n.name =~ '(?i).*SUBSTRING.*' RETURN n;
Run Code Online (Sandbox Code Playgroud)