用于搜索列表的 Cypher Query

iam*_*rot 6 neo4j cypher

您好,我正在使用,neo4j并且我有以下架构:

"person": 
{
    "name": "Robert Mathews",
    "nicknames": ["rob", "bert", "Mathew"]
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一些人的姓名或昵称,['mike', 'rob', 'nick'] 我知道如何通过列表搜索房产:

MATCH (p:Person) 
WHERE p.name IN ['mike', 'rob', 'nick'] 
OR p.nickname IN ['mike', 'rob', 'nick'] 
RETURN p
Run Code Online (Sandbox Code Playgroud)

但现在的问题在于,p.nameandp.nickname不再是一种string类型,而是一种array类型。

谁能指出正确的方向来将输入数组与人员数组进行匹配并获得最佳匹配?

Dav*_*ett 7

您可以执行类似的操作,在节点上的昵称列表中查找可能存在于您正在检查的昵称列表中的任何项目。

MATCH (p:Person)
WHERE p.name IN ['mike', 'rob', 'nick'] 
OR ANY( nn IN p.nickname WHERE nn IN ['mike', 'rob', 'nick'])
RETURN p
Run Code Online (Sandbox Code Playgroud)


cyb*_*sam 3

APOC 函数apoc.coll.intersection可能会有所帮助:

MATCH (p:Person)
WHERE
  SIZE(apoc.coll.intersection(p.name, ['mike', 'rob', 'nick'])) > 0 OR
  SIZE(apoc.coll.intersection(p.nickname, ['mike', 'rob', 'nick'])) > 0
RETURN p;
Run Code Online (Sandbox Code Playgroud)