如何根据Neo4j中的其他属性更改节点的属性

时间:2014-04-15 03:33:28

标签: regex properties neo4j cypher

我刚开始使用Neo4j服务器2.0.1。我在编写一个cypher脚本时遇到了麻烦,它将其中一个节点属性更改为基于其已定义属性之一的内容。

所以如果我创建了这些节点:

CREATE (:Post {uname:'user1', content:'Bought a new pair of pants today', kw:''}),
       (:Post {uname:'user2', content:'Catching up on Futurama', kw:''}),
       (:Post {uname:'user3', content:'The last episode of Game of Thrones was awesome', kw:''})

我希望脚本查看内容属性并选择单词" Bought"并使用正则表达式将kw属性设置为该属性,以挑选大于五个字符的单词。因此,用户2的帖子将是" Catching,Futurama"而且用户3的帖子将是"剧集,权力,真棒"。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

MATCH (p:Post { uname:'user1' })
WHERE p.content =~ "Bought .+"
SET p.kw=filter(w in split(p.content," ") WHERE length(w) > 5)

如果您想对所有帖子执行此操作,这可能不是最快的操作:

MATCH (p:Post)
WHERE p.content =~ "Bought .+"
SET p.kw=filter(w in split(p.content," ") WHERE length(w) > 5)
  • split将一个字符串拆分为一个部分集合,在本例中为空格分隔的单词
  • 过滤器按WHERE后面的条件过滤集合,只保留满足条件的元素

您可能更愿意为这些关键字创建节点,并将帖子链接到关键字节点。