【问题标题】:Getting different (and incorrect) results runing the same cypher query on identical DB schemas在相同的数据库模式上运行相同的密码查询获得不同(和不正确)的结果
【发布时间】:2012-11-28 18:07:12
【问题描述】:

我在两个相同的 neo4j 数据库架构上运行以下密码查询:

START dave = node(7)
// dave's friend who lives and attends an event in the same city
MATCH dave-[:FRIEND]-friend-[:LIVES]->city-[:HOSTS]->event<-[:ATTENDS]-friend
RETURN dave.name, friend.name, city.name, event.name;

当我在本地服务器上的数据库架构上运行上述查询时,我得到了正确的结果——一条路径:

+----------------------------------------------------+ 
| dave.name | friend.name | city.name | event.name   |  
+----------------------------------------------------+ 
| "dave"    | "adam"      | "london"  | "exhibition" | 
+----------------------------------------------------+

事实上,对于 4 个人节点 (4, 5, 6, 7) 中的每一个,adam=node(4) 是唯一一个在同一个城市生活和参加活动的人。

但是,当我运行相同的查询 here(在与本地服务器上完全相同的数据库架构上)时,我得到以下不正确的结果:

+----------------------------------------------------+ 
| dave.name | friend.name | city.name | event.name   |  
+----------------------------------------------------+ 
| "dave"    | "adam"      | "london"  | "exhibition" | 
| "dave"    | "adam"      | "london"  | "exhibition" | 
| "dave"    | "bill"      | "paris"   | "seminar"    | // bill doesn't attend seminar
+----------------------------------------------------+

对于其他人而不是 dave=node(7),结果 here 也是不正确的(不存在的额外路径)。

【问题讨论】:

  • 它们是否都运行相同版本的 neo4j?你还说他们有相同的信息,这是你做的两个负载,还是一个负载和另一个副本?
  • 在我的计算机上,我使用的是 v1.8 neo4j,在 web console 上,我在运行查询之前选择了相同的版本。所以是的,在这两种情况下我都有相同的版本。此外,对于所有其他版本(比 v1.8 更旧或新的版本),Web 控制台上的查询给出了相同的结果(正如我之前解释的那样不正确)。抱歉,@Nicholas 您评论中的第二个问题不清楚。请解释一下。
  • 您如何将数据加载到您的系统中?您说它们是相同的数据,但您如何确保这一点?
  • @Nicholas - 要设置图形数据库,我运行这个密码 CREATE query。正如您在web console 上看到的,这是唯一的数据;在我的计算机上,我在一个空数据库上运行 CREATE 查询。因此,在这两种情况下,我在问题中发布的下一个查询都有相同的数据。
  • 您能在github.com/neo4j/neo4j/issues 中提出这个问题吗?非常感谢。

标签: neo4j graph-databases cypher


【解决方案1】:

尝试将匹配阶段分成 2 个,我从未在一个匹配模式中使用一个参数名称 2 次:

除了

MATCH dave-[:FRIEND]-friend-[:LIVES]->city-[:HOSTS]->event<-[:ATTENDS]-friend

使用

MATCH dave-[:FRIEND]-friend-[:LIVES]->city-[:HOSTS]->event, event<-[:ATTENDS]-friend

【讨论】:

  • 第一个查询没有任何问题——它完全合法,并且在我的本地数据库服务器上运行时返回正确的(预期的)结果。我的问题是为什么相同的查询在 Web 控制台 here 上的另一个相同的数据库模式上运行时会给出不正确的结果(返回多个不存在的路径,其中只存在一个路径)。此外,在这两种情况下,我都使用/设置相同的版本(v1.8)并确保 2 个数据库中的数据相同。
猜你喜欢
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2021-03-23
  • 1970-01-01
  • 2016-11-08
相关资源
最近更新 更多