Cypher用于搜索列表的查询

时间:2018-04-05 02:51:19

标签: neo4j cypher

您好我正在使用sortStrings(),我有以下架构:

neo4j

我正在搜索一些姓名或昵称为"person": { "name": "Robert Mathews", "nicknames": ["rob", "bert", "Mathew"] } 的人 我知道如何通过列表搜索属性:

['mike', 'rob', 'nick']

但现在问题在于MATCH (p:Person) WHERE p.name IN ['mike', 'rob', 'nick'] OR p.nickname IN ['mike', 'rob', 'nick'] RETURN p p.name不再是p.nickname类型,而是string类型。

有人能指出我正确的方向来匹配输入数组和人物阵列并获得最佳匹配吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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;