2014-11-05 245 views
3

asking about Neo4j caches之后,没有一个明确的解决方案,我一直在测试Neo4j作为可能在生产中使用的数据库。但是,我现在面临着一个新的问题,即使用特定的标签对属性进行索引。Neo4j索引错误?

事情是,不知何故,如果我通过标签和属性(意外地具有相同的名称)请求节点,Neo4j没有获得正确的数据。我截取了一些正在发生的事情的截图,希望能够帮助理解我推断出这可能是一个错误的方式。这些是由两个不同的标签发生的两个例子:

enter image description here

我有标签一个和标签,和属性一个b。如果从底部读到顶部,你可以看到,我以下步骤:

  1. 我请求与属性一个(无标签)节点< - 工程
  2. 我请求节点与标签一个和属性一个 < - 不起作用(使用索引)
  3. 我请求节点与标签和属性b < - 工程
  4. 我请求与标签节点和属性一个 < - 工程
  5. 我请求节点与标签和属性b < - 工程(利用指数)

我还在我的请求中添加了额外的列(它们没有影响),以检查两列的值是否相同,并检查标签。

我只有在使用与同名的标签对该属性编制索引时才会遇到此问题。这意味着,标签A和属性a。但是,标签B和属性b没有发生这种情况。至少现在不是这样,因为与其他标签重复相同的场景属性名称(遵循规则A ... a)导致了同样的问题。

我不需要说外界没有影响,所以我完全控制了数据库中发生的事情。

编辑:

enter image description here

+0

你正在运行什么版本?你可以在你的数据上运行一致性检查器:http://www.markhneedham.com/blog/2014/01/22/neo4j-backup-store-copy-and-consistency-check/ – 2014-11-16 10:15:10

回答

1

你的#1并没有真正的 “工作”,因为你应该得到(至少)2行(每个标签)。

在您的RETURN语句中,您应该包含id(n),以便您可以查看哪些节点正在返回。目前尚不清楚。

EDITED

OK,与上市的ID,它是现在很清楚,我们正在谈论与多个标签的单个节点。所以,这看起来像一个奇怪的错误。如果你在最新版本中看到这个,你应该考虑在github.com/neo4j/neo4j/issues上为此创建一个问题。

+0

如果你检查文档,函数'labels()'将集合返回为列http://neo4j.com/docs/stable/query-functions-collection.html#functions-labels。关于节点的ID,我正在编辑添加新屏幕截图的问题。您在过去两段中提出的其他建议也是我的第一个难题,因此我添加了两个额外的列来检查列的平等性以及标签的名称 – 2014-11-05 18:42:35

+2

好吧,列出的ID现在是清楚地表明我们正在讨论具有多个标签的单个节点。所以,这看起来像一个奇怪的错误。如果你在最新版本中看到这个,你应该考虑在https://github.com/neo4j/neo4j/issues上为此创建一个问题。 (我编辑了我的答案以包含此文本) – cybersam 2014-11-05 18:53:43