如果一个条件在Neo4j中失败,则查询多个索引不起作用

时间:2013-07-09 13:04:51

标签: neo4j cypher

我正在尝试搜索所有索引上的关键字。我有我的图数据库。

以下是查询:

start n=node:Users(Name="Hello"), 
m=node:Location(LocationName="Hello")
return n,m

我正在获取节点,如果两个索引(用户和位置)中都存在关键字“Hello”,并且如果任何一个索引中都没有关键字Hello,则不会得到任何结果。< / p>

请您告诉我如何修改此密码查询,以便在任何索引键(Name或LocationName)中出现“Hello”时获得结果。

1 个答案:

答案 0 :(得分:1)

在2.0中你可以使用UNION并有两个单独的查询:

start n=node:Users(Name="Hello")
return n
UNION
start n=node:Location(LocationName="Hello")
return n;

您编写查询的方式的问题是它计算nm之间的对的笛卡尔积的方式,因此如果nm不是没发现,没有找到结果。如果找到一个n,并且找到了两个m,则会得到2个结果(重复n)。与FROM子句在SQL中的工作方式类似。如果你有一个名为empty的空表,并且你select * from x, empty;那么你将得到0结果,除非你做某种外连接。

不幸的是,在1.9中这样做有点困难。我已经尝试了许多迭代的事情,比如WITH collect(n) as n等等,但不管是什么,它都归结为笛卡尔积的东西。