是否可以在neo4j上运行不区分大小写的cypher查询?
试试这个:http://console.neo4j.org/
当我输入这个:
start n=node(*)
match n-[]->m
where (m.name="Neo")
return m
Run Code Online (Sandbox Code Playgroud)
它返回一行.但是当我输入这个:
start n=node(*)
match n-[]->m
where (m.name="neo")
return m
Run Code Online (Sandbox Code Playgroud)
它不会返回任何东西; 因为名称保存为"Neo".是否有一种简单的方法来运行不区分大小写的查询?
我正在寻找类似于MySQL(SHOW INDEXES)的东西.我能够在Python中使用py2neo获取索引列表
graphDB = neo4j.GraphDatabaseService()
indexes = graphDB.get_indexes(neo4j.Node)
print(format(indexes))
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有办法在Cypher做类似的事情.
我知道我可以使用Cypher在单个属性上创建一个唯一约束CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE.但我想知道是否有可能创建一个涉及多个属性的唯一约束.如果是这样,怎么样?
在Neo4j的Cypher查询语言中,一个MATCH子句紧跟另一个后面的区别是这样的:
MATCH (d:Document{document_ID:2})
MATCH (d)--(s:Sentence)
RETURN d,s
Run Code Online (Sandbox Code Playgroud)
与同一MATCH条款中的逗号分隔模式相比?例如:
MATCH (d:Document{document_ID:2}),(d)--(s:Sentence)
RETURN d,s
Run Code Online (Sandbox Code Playgroud)
在这个简单的例子中,结果是一样的.但是有没有"陷阱"?
我想弄清楚MERGE和CREATE UNIQUE之间有什么区别.我知道这些功能:
我能够创建节点,如果不存在模式.
MERGE (n { name:"X" }) RETURN n;
Run Code Online (Sandbox Code Playgroud)
这创建节点"n",其属性名称为空节点"m",关系为RELATED.
MERGE (n { name:"X" })-[:RELATED]->(m) RETURN n, m;
Run Code Online (Sandbox Code Playgroud)
我无法像这样创建节点.
CREATE UNIQUE (n { name:"X" }) RETURN n;
Run Code Online (Sandbox Code Playgroud)
如果存在节点"n",则创建唯一使空节点"m"和关系RELATED.
MATCH (n { name: 'X' }) CREATE UNIQUE (n)-[:RELATED]->(m) RETURN n, m;
Run Code Online (Sandbox Code Playgroud)
如果存在此模式,则不会创建任何内容,只返回模式.
从我的角度来看,我看到MERGE和CREATE UNIQUE是完全相同的查询,但是使用CREATE UNIQUE,你无法在关系中创建起始节点.如果有人能解释这个问题并比较这些问题,我将不胜感激.
在SQL中:
Delete From Person Where ID = 1;
在Cypher中,按ID删除节点的脚本是什么?
(已编辑:ID = Neo4j的内部节点ID)
可以说,我有一个用户:
CREATE (n { name: 'Tamil' })
Run Code Online (Sandbox Code Playgroud)
和2个角色:
CREATE (n { name: 'developer' } )
CREATE (n { name: 'tester' } )
Run Code Online (Sandbox Code Playgroud)
然后,我在用户和两个角色中的每一个之间建立关系.
CYPHER 1.9 START a = node(*), b = node(*)
WHERE a.name = 'Tamil' AND b.name = 'developer'
CREATE (a)-[r:HAS_ROLE]->(b)
RETURN r
CYPHER 1.9 START a = node(*), b = node(*)
WHERE a.name = 'Tamil' AND b.name = 'tester'
CREATE (a)-[r:HAS_ROLE]->(b)
RETURN r
Run Code Online (Sandbox Code Playgroud)
现在,我想从用户中删除测试者角色关系.我试过了:
CYPHER 1.9 START a = node:node_auto_index('name:Tamil')
MATCH a-[r:HAS_ROLE]-()
RETURN r
Run Code Online (Sandbox Code Playgroud)
但是,它返回了两种关系.我知道我可以通过关系附加财产.但是,再一次,我不知道密码的语法.
我是Neo4j的新手.任何建议都会很棒!
谢谢!
在从CSV导入数据后,我正在以简单和正常的方式定义两个实体Gene和Chromosome之间的关系:
MATCH (g:Gene),(c:Chromosome)
WHERE g.chromosomeID = c.chromosomeID
CREATE (g)-[:PART_OF]->(c);
Run Code Online (Sandbox Code Playgroud)
然而,当我这样做时,neo4j(浏览器UI)抱怨:
此查询在断开连接的模式之间构建笛卡尔积.如果查询的一部分包含多个断开连接的模式,这将在所有这些部分之间构建一个笛卡尔积.这可能会产生大量数据并减慢查询处理速度.虽然偶尔会有意图,但通常可以通过在不同部分之间添加关系或使用OPTIONAL MATCH(标识符为:(c))来重新制定避免使用此交叉产品的查询.
我不明白这是什么问题.chromosomeID是一个非常简单的外键.
我试图从neo4j浏览器运行查询来重现我的neo4j-javascript-driver客户端的结果.
在neo4j中定义查询参数的语法是什么?
我最近参加了在纽约举办的neo4j培训课程,培训师(David Fauth)做到了这一点,遗憾的是,我没有记录下来,因为我认为我可以在网上阅读这篇文章......但没有成功.