Neo4j 如何优化具有相似特征的三个查询?(塞弗)
我的Neo4j查询有问题。例如,在我的数据库中,我想根据一个人的姓、名和出生年份来选择与他相似的人。如果我找不到任何一个完全匹配的人,那么我将执行查询以查找具有相同姓氏和出生年份的人。最后,如果第二次查询没有找到匹配项,我将进行第三次匹配,以查找是否有人的出生年份与该人的相同。如何将这三个查询合并为一个查询。我认为对于大型数据库来说,这种类型的查询非常广泛,所以我需要一些方法来优化这种逻辑Neo4j 如何优化具有相似特征的三个查询?(塞弗),neo4j,cypher,Neo4j,Cypher,我的Neo4j查询有问题。例如,在我的数据库中,我想根据一个人的姓、名和出生年份来选择与他相似的人。如果我找不到任何一个完全匹配的人,那么我将执行查询以查找具有相同姓氏和出生年份的人。最后,如果第二次查询没有找到匹配项,我将进行第三次匹配,以查找是否有人的出生年份与该人的相同。如何将这三个查询合并为一个查询。我认为对于大型数据库来说,这种类型的查询非常广泛,所以我需要一些方法来优化这种逻辑 MATCH (c:Company)-[r:CARRY]->(p:Person {LastName:
MATCH (c:Company)-[r:CARRY]->(p:Person {LastName: "Foo", FirstName: "Bar", YOB: 1999 })
RETURN p
如果没有找到答案,我会这样做
MATCH (c:Company)-[r:CARRY]->(p:Person {LastName: "Foo", YOB: 1999 })
RETURN p
如果我仍然找不到答案,我会尝试
MATCH (c:Company)-[r:CARRY]->(p:Person {YOB: 1999 })
RETURN p
我只是想对这种逻辑进行更有效的查询。谢谢您的帮助。您的查询可以反向执行测试。也就是说,首先进行更一般的测试 在查询的步骤1中,您可以找到所有具有所需的
YOB
的Person
节点,这将是最终结果的超集。让我们调用这组节点p1
在步骤2中,按所需的LastName
过滤p1
中的节点集,然后调用生成的子集p2
在步骤3中,根据所需的FirstName
过滤p2
中的节点集,并调用生成的子集p3
最后,如果不为空,可以返回p3
,如果不为空,可以返回p2
,或者返回p1
下面是一个示例(假定所需的YOB
、LastName
和FirstName
值作为以下内容传递):
[更新]
如果要限制结果
列表的最大大小,只需将查询的最后一行更改为:
ELSE p1 END[..$limit] AS result
其中,
limit
被假定为一个参数。您的查询可以反向执行测试。也就是说,首先进行更一般的测试
在查询的步骤1中,您可以找到所有具有所需的YOB
的Person
节点,这将是最终结果的超集。让我们调用这组节点p1
在步骤2中,按所需的LastName
过滤p1
中的节点集,然后调用生成的子集p2
在步骤3中,根据所需的FirstName
过滤p2
中的节点集,并调用生成的子集p3
最后,如果不为空,可以返回p3
,如果不为空,可以返回p2
,或者返回p1
下面是一个示例(假定所需的YOB
、LastName
和FirstName
值作为以下内容传递):
[更新]
如果要限制结果
列表的最大大小,只需将查询的最后一行更改为:
ELSE p1 END[..$limit] AS result
其中,
限制
假定为一个参数。非常感谢!但是这里有一点输入错误,las else应该返回p1,对吗?是的,我已经修正了我的答案。很高兴它对你有效。如果我想在这里施加限制,它似乎不起作用。你知道我怎么做吗?非常感谢!但是这里有一点输入错误,las else应该返回p1,对吗?是的,我已经修正了我的答案。很高兴它对你有效。如果我想在这里施加限制,它似乎不起作用。你知道我怎么做吗?