Neo4j查询错误地返回null

Neo4j查询错误地返回null,neo4j,cypher,Neo4j,Cypher,我正在与Docker一起使用Neo4j v3.4.1 我通过cypher shell运行以下查询: MATCH (blogA:content {entitySubType:"blog"})-[]->(t:term)<-[]-(blogB:content {entitySubType:"blog"}) WHERE blogA <> blogB RETURN ID(blogA), ID(blogB), count(t); 我们在这里共同假设entitySubType不是

我正在与Docker一起使用Neo4j v3.4.1

我通过cypher shell运行以下查询

MATCH (blogA:content {entitySubType:"blog"})-[]->(t:term)<-[]-(blogB:content {entitySubType:"blog"})
WHERE blogA <> blogB 
RETURN ID(blogA), ID(blogB), count(t);

我们在这里共同假设entitySubType不是为所有内容节点设置的。我证实了这个假设是正确的。基于此,我使用exists()谓词函数重新编写了查询,如下所示:

MATCH (blogA:content)-[:TaggedWith]->(t:term)<-[:TaggedWith]-(blogB:content) 
WHERE ID(blogA) <> ID(blogB) AND exists(blogA.entitySubType) AND 
exists(blogB.entitySubType) AND "blog" = blogA.entitySubType AND "blog" = 
blogB.entitySubType RETURN ID(blogA), ID(blogB), count(t);

MATCH(blogA:content)-[:TaggedWith]->(t:term)听起来可能是一个空属性,可能不是所有帖子都设置了“entitySubType”

错误是一致的还是间歇性的?
数据库是否持续更新,如果是,如何更新?

听起来它可能是一个空属性,可能并非所有帖子都设置了“entitySubType”

错误是一致的还是间歇性的?

数据库是否持续更新,如果是,如何更新?

某些节点中可能未设置属性“entitySubType”,这就是查询执行时不返回“entitySubType”的节点的原因。请确保所有节点都包含entitySubType属性。

某些节点中可能未设置属性“entitySubType”,这就是在执行查询时不会返回缺少“entitySubType”的节点的原因。确保所有节点都包含entitySubType属性。

是否尝试使用最新的修补程序版本?3.4.7是目前最新的。不,我没有。但我已经在使用最新的官方docker图像。我可以修补它吗?你每次都运行完全相同的查询,还是每次都略有不同(例如,“blog”可能是其他值)?@cybersam我每次都运行完全相同的查询,并且在~20小时后失败。同时,我昨天重新编写了它,并使用了exists谓词函数。请查看下面bjornbergq回复中的评论以了解确切的查询。您是否尝试使用最新的补丁版本?3.4.7是目前最新的。不,我没有。但我已经在使用最新的官方docker图像。我可以修补它吗?你每次都运行完全相同的查询,还是每次都略有不同(例如,“blog”可能是其他值)?@cybersam我每次都运行完全相同的查询,并且在~20小时后失败。同时,我昨天重新编写了它,并使用了exists谓词函数。请查看下面bjornbergq回复中的评论,以了解确切的查询。感谢回复。entitySubType应设置在所有帖子上。但对我来说,这听起来也像是一个缺失的值或类似的东西。但是Neo4j不会忽略缺少值的相应节点吗?每次约20小时后都会发生此错误。因此,可能总是同一个节点(可能缺少值)产生错误。但是我该怎么处理呢?我不知道如何进行。数据库未更新。我有一个数据转储,需要在此设置中评估查询。因此,我的查询是唯一正在运行的操作。我认为您应该根据不同节点的ID进行查询以匹配它们,而不是使用值运算符!主要是因为我认为value操作符不会将节点作为值比较来处理。让它更像:MATCH(blogA:content{entitySubType:“blog”})-[:TaggedWith |:partOf]->(t:term)我将查询公式化为:MATCH(blogA:content{entitySubType:“blog”})-[:TaggedWith |:partOf]->(t:term)它应该翻译成where子句,但试着把它改成where子句!但是在公式化查询的WHERE子句中,您没有按ID进行匹配。。应该是匹配的(blogA:content{entitySubType:“blog”})-[:TaggedWith |:partOf]->(t:term)我更新了帖子。请大家看一看,谢谢你们的帮助:)谢谢你们的回复。entitySubType应该设置在所有帖子上。但对我来说,这听起来也像是一个缺失的值或类似的东西。但是Neo4j不会忽略缺少值的相应节点吗?每次约20小时后都会发生此错误。因此,可能总是同一个节点(可能缺少值)产生错误。但是我该怎么处理呢?我不知道如何进行。数据库未更新。我有一个数据转储,需要在此设置中评估查询。因此,我的查询是唯一正在运行的操作。我认为您应该根据不同节点的ID进行查询以匹配它们,而不是使用值运算符!主要是因为我认为value操作符不会将节点作为值比较来处理。让它更像:MATCH(blogA:content{entitySubType:“blog”})-[:TaggedWith |:partOf]->(t:term)我将查询公式化为:MATCH(blogA:content{entitySubType:“blog”})-[:TaggedWith |:partOf]->(t:term)它应该翻译成where子句,但试着把它改成where子句!但是在公式化查询的WHERE子句中,您没有按ID进行匹配。。应该是匹配的(blogA:content{entitySubType:“blog”})-[:TaggedWith |:partOf]->(t:term)我更新了帖子。请大家看一看,谢谢你们的帮助:)谢谢!我可以通过重新设置查询来避免这个问题吗?例如,使用where子句而不是花括号。我无法理解为什么查询失败,而不是忽略缺少属性的节点。我将其重新格式化为以下查询,目前正在运行它。你怎么认为?MATCH(blogA:content{entitySubType:“blog”})-[:TaggedWith |:partOf]->(t:term)您还可以使用以下查询:MATCH(blogA:content)-[:TaggedWith |:partOf]->(t:term)它与您重新编写的查询相同,但是我们可以在where子句之后简单地检查label属性,而不是同时使用label匹配和exists,这将减少查询的复杂性。我更新了帖子。请大家看一看,谢谢你们的帮助:)谢谢!我可以通过重新设置查询来避免这个问题吗?例如,使用where子句而不是花括号。我不明白为什么查询失败,而只是忽略点头
MATCH (blogA:content)-[:TaggedWith]->(t:term)<-[:TaggedWith]-(blogB:content) 
WHERE ID(blogA) <> ID(blogB) AND exists(blogA.entitySubType) AND 
exists(blogB.entitySubType) AND "blog" = blogA.entitySubType AND "blog" = 
blogB.entitySubType RETURN ID(blogA), ID(blogB), count(t);