Database 如何基于大量名称列表在neo4j数据库中查找节点

Database 如何基于大量名称列表在neo4j数据库中查找节点,database,neo4j,cypher,graph-theory,cypher-3.1,Database,Neo4j,Cypher,Graph Theory,Cypher 3.1,所以我使用neo4j数据库,我想在这个数据库中找到一些人。人员存储为节点,并具有某些属性以及与其他节点的关系。现在我有了一个我想找的人的列表(xlsm/csv文件)。此列表包含大约8000个名称以及我可以用于查询的其他属性 我通过使用列表中的单个名称来搜索节点,例如: MATCH (n) WHERE n.name = 'Peter' RETURN n.name, n.age 我还了解,我可以查看属性是否出现在字符串列表中: MATCH (a) WHERE a.name IN ['Pete

所以我使用neo4j数据库,我想在这个数据库中找到一些人。人员存储为节点,并具有某些属性以及与其他节点的关系。现在我有了一个我想找的人的列表(xlsm/csv文件)。此列表包含大约8000个名称以及我可以用于查询的其他属性

我通过使用列表中的单个名称来搜索节点,例如:

MATCH (n)

WHERE n.name = 'Peter'

RETURN n.name, n.age
我还了解,我可以查看属性是否出现在字符串列表中:

MATCH (a)

WHERE a.name IN ['Peter', 'Timothy']

RETURN a.name, a.age

但是,我无法通过手动在列表中输入数千个名称来创建查询。那么,根据我想找到的人筛选最有效的方法是什么呢?

一种方法是使用
加载CSV
——通常您会使用它将数据加载到图表中,但您不必这样做。给出一个图表:

MERGE (:Person { name: 'Geoff' })
MERGE (:Person { name: 'Timothy' })
MERGE (:Person { name: 'Peter' })
并将CSV文件放入数据库的导入目录:

Name,Phone
Timothy,07700900100
Peter,07700900101
您可以将所有感兴趣的搜索名称加载到列表中,然后使用标准的
in
子句进行查找:

LOAD CSV WITH HEADERS FROM 'file:///names.csv' AS line
WITH collect(line.Name) AS names
MATCH (p: Person) WHERE p.name IN names
RETURN p

注意,我们排除了杰夫,因为他不在CSV中

另一种方法是尝试一次匹配传入CSV的每一行,这样可以更容易地筛选多个属性:

LOAD CSV WITH HEADERS FROM 'file:///names.csv' AS line
MATCH (p: Person) WHERE p.name = line.Name AND p.phone = line.Phone
RETURN p

一种方法是使用
加载CSV
——通常您可以使用它将数据加载到图形中,但不必这样做。给出一个图表:

MERGE (:Person { name: 'Geoff' })
MERGE (:Person { name: 'Timothy' })
MERGE (:Person { name: 'Peter' })
并将CSV文件放入数据库的导入目录:

Name,Phone
Timothy,07700900100
Peter,07700900101
您可以将所有感兴趣的搜索名称加载到列表中,然后使用标准的
in
子句进行查找:

LOAD CSV WITH HEADERS FROM 'file:///names.csv' AS line
WITH collect(line.Name) AS names
MATCH (p: Person) WHERE p.name IN names
RETURN p

注意,我们排除了杰夫,因为他不在CSV中

另一种方法是尝试一次匹配传入CSV的每一行,这样可以更容易地筛选多个属性:

LOAD CSV WITH HEADERS FROM 'file:///names.csv' AS line
MATCH (p: Person) WHERE p.name = line.Name AND p.phone = line.Phone
RETURN p