标签: cypher

Neo4j - Cypher vs Gremlin查询语言

我开始使用REST API使用Neo4j进行开发.我看到有两个选项可用于执行复杂查询 - Cypher(Neo4j的查询语言)和Gremlin(通用图形查询/遍历语言).

这就是我想知道的 - 有没有任何查询或操作可以通过使用Gremlin完成,而不能用Cypher完成?或相反亦然?

Cypher对我来说似乎比Gremlin要清楚得多,而且一般来说Neo4j中的人似乎都会选择Cypher.但是 - 如果Cypher与Gremlin相比有限 - 我真的很想提前知道.

neo4j graph-databases cypher gremlin

95
推荐指数
8
解决办法
3万
查看次数

如果不存在关系,则返回节点

我正在尝试使用cypher创建一个查询,它将"找到"厨师可能缺少的成分,我的图形设置如下:

(ingredient_value)-[:is_part_of]->(ingredient)
Run Code Online (Sandbox Code Playgroud)

(ingredient)将具有name ="染料颜色"的键/值. (ingredient_value)可以有一个键值/值="红色"和"是"的一部分(ingredient, name="dye colors").

(chef)-[:has_value]->(ingredient_value)<-[:requires_value]-(recipe)-[:requires_ingredient]->(ingredient)
Run Code Online (Sandbox Code Playgroud)

我正在使用这个查询获得ingredients食谱所需的所有,但不是它们的实际值,但我希望只返回ingredients厨师没有的,而不是每个食谱所需的所有成分.我试过了

(chef)-[:has_value]->(ingredient_value)<-[:requires_value]-(recipe)-[:requires_ingredient]->(ingredient)<-[:has_ingredient*0..0]-chef
Run Code Online (Sandbox Code Playgroud)

但这没有任何回报.

这是可以通过cypher/neo4j实现的东西,还是通过返回所有成分并通过它们自行分类来最好地处理这个问题?

额外奖励:还有一种方法可以使用cypher来匹配厨师拥有的所有值以及食谱所需的所有值.到目前为止,我只返回了a返回的所有部分匹配,chef-[:has_value]->ingredient_value<-[:requires_value]-recipe并自己聚合结果.

neo4j cypher

82
推荐指数
3
解决办法
7万
查看次数

如何重置/清除/删除neo4j数据库?

我们可以通过以下查询删除所有节点和关系.

MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r
Run Code Online (Sandbox Code Playgroud)

但是新创建的节点获取内部标识为({last node internal id} + 1).它不会重置为零.

我们怎样才能重置neo4j数据库,比如新创建的节点会将id设为0?

从2.3开始,我们可以删除所有具有关系的节点,

MATCH (n)
DETACH DELETE n
Run Code Online (Sandbox Code Playgroud)

database neo4j cypher

59
推荐指数
7
解决办法
5万
查看次数

CYPHER查询中的LIKE子句

Cypher查询似乎不支持LIKE.

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

例如:

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

neo4j cypher

52
推荐指数
4
解决办法
4万
查看次数

neo4j如何用Cypher返回所有节点标签?

我找不到如何用Cypher返回节点标签.

有谁知道这个操作的语法?

neo4j cypher

48
推荐指数
5
解决办法
3万
查看次数

Neo4j:匹配多个标签(2个或更多)

我想做一个搜索,我想开始遍历2个标签(OR条件).例如,我需要找出所有标记为"男性"或"女性"且其属性名称为"〜"的节点.AIL.".

neo4j cypher

45
推荐指数
6
解决办法
3万
查看次数

为什么Neo4J告诉我没有勺子?

我用Neo4J代表文本; 在最简单的情况下,文本是由关系LEMMA_TEXT连接的一系列单词.

我试图找到一个已知单词之后的第N个单词,查询看起来像这样.

MATCH (anchor)-[:LEMMA_TEXT*32]->(word) 
WHERE id(anchor) = 3275 
RETURN word
Run Code Online (Sandbox Code Playgroud)

在一个特定的情况下,如果我将路径长度增加到33,我会收到此错误:

Neo.DatabaseError.Statement.ExecutionFailure: There is no spoon.
Run Code Online (Sandbox Code Playgroud)

然而,以下查询返回正确的结果.

MATCH (anchor)-[:LEMMA_TEXT*32]->(word)-[:LEMMA_TEXT]->(next) 
WHERE id(anchor) = 3275 
RETURN next
Run Code Online (Sandbox Code Playgroud)

这表明我想要的节点存在且可以访问.

手册的哪一部分告诉我如何用心灵弯曲勺子?更重要的是,这究竟意味着什么?!

neo4j cypher

45
推荐指数
1
解决办法
874
查看次数

显示所有节点和关系

如何在"数据浏览器"选项卡中显示所有节点和关系?

我可以在搜索字段中输入什么样本索引查询?

neo4j cypher

43
推荐指数
6
解决办法
5万
查看次数

Neo4j:获取图表中的所有节点,即使是那些未被关系连接的节点

使用Cypher如何获取图形中的所有节点?我正在对图表运行一些测试,我有一些没有关系的节点,所以我在制作查询时遇到了麻烦.

我想要得到它们的原因是我想在每次测试开始时删除图中的所有节点.

neo4j cypher

42
推荐指数
3
解决办法
5万
查看次数

使用Cypher添加与现有节点的关系

我是第一次尝试Neo4j.我正在使用2.0-RC1社区版.

我创建了一些节点:

MERGE (u:User{username:'admin',password:'admin'})
MERGE (r1:Role{name:'ROLE_ADMIN'})
MERGE (r2:Role{name:'ROLE_WEB_USER'})
MERGE (r3:Role{name:'ROLE_REST_USER'})
Run Code Online (Sandbox Code Playgroud)

现在我想在节点之间添加关系.不过,我希望清除上面的脚本创建的现有数据库,添加语句,并再次运行它.我想添加与现有节点的关系.谷歌帮我找到了这个:

START n=node(*), m=node(*)  
where has(n.username) and has(m.name) and n.username = 'admin' 
and m.name = 'ROLE_WEB_USER' 
create (n)-[:HAS_ROLE]->(m)
Run Code Online (Sandbox Code Playgroud)

哪个工作正常(即使我不懂所有的语法).但是,我知道这会找到任何具有username属性的节点和任何具有name属性的节点,而不是使用标签来检查它是否具有正确的节点类型.

如何使用标签做同样的事情?

neo4j cypher

42
推荐指数
2
解决办法
6万
查看次数

标签 统计

cypher ×10

neo4j ×10

database ×1

graph-databases ×1

gremlin ×1