我是Neo4j CYPHER查询语言的新手。我正在发现它,同时分析来自CRM系统的人与人之间的关系图。我在Windows 7 Enterprise上使用Neo4j 2.1.2社区版和Oracle Java JDK 1.7.0_45,并通过Web界面与Neo4j进行交互。
有一件事让我感到困惑:我注意到我的一些查询的结果集确实会随着时间的推移而增长,也就是说,如果我在使用数据库很长时间后(1或2小时后)运行相同的查询,我第二次得到了更多的结果 - 没有更新,删除或添加任何东西到数据库。
这可能吗?是否有可能发生的特殊情况?我希望数据库结果随着时间的推移保持一致,只要数据库没有变化。
我觉得,就好像数据库在后台随着时间的推移而增长其索引,以及查询结果是否依赖于数据库引擎能够通过成长的索引到达更多节点和关系。它可能是内存或索引配置问题吗?或者我可能喝多少咖啡?唉,它不容易再现。
示例查询:
MATCH (pf:Portfolio)<-[:withRelation]-(p1:Partner)-[:JOINTACC]->(p2:Partner)
WHERE (pf.dateBoucl = '') AND (pf.catClient = 'NO')
AND NOT (p2)-[:relTo]->(:Partner)
MATCH (p1)-[r]->(p3:Partner)
WHERE NOT (p3)-[:relTo]->(:Partner)
AND NOT TYPE( r) IN [ 'relTo', 'ADRESSAT', 'MEMBER']
WITH pf, p1, p2, COLLECT( TYPE( r)) AS types
WHERE ALL( t IN types WHERE t = 'JOINTACC')
RETURN pf.catClient, pf.natureTitulaire, COUNT( DISTINCT pf);
起初我得到了98个结果。在2小时后运行它时,我得到103个结果,然后它对于后续运行似乎稳定。而且我很确定我没有更改数据库内容。
任何提示非常感谢!亲切的问候
Schema看起来像这样:
:schema
Indexes
ON :Country(ID) ONLINE (for uniqueness constraint)
ON :Partner(partnerID) ONLINE (for uniqueness constraint)
ON :Portfolio(partnerID) ONLINE
ON :Portfolio(noCli) ONLINE
ON :Portfolio(noDos) ONLINE
Constraints
ON (partner:Partner) ASSERT partner.partnerID IS UNIQUE
ON (country:Country) ASSERT country.ID IS UNIQUE
答案 0 :(得分:0)
转储/下载两次运行的查询结果并对它们进行差异处理。然后你会看到有什么不同,你可以调查它的来源。
也许你也应该更新到2.1.3,它解决了一个可能与此相关的缓存问题。