我想查询在字符串数组属性中具有特定值的节点。例如,我的节点可能有2个属性,名称(字符串)和别名(字符串数组)。我已经使用CREATE INDEX ON :F2(name)
之类的方法在两个属性上创建了一个索引。
我可以使用像这样的密码查询name属性,结果是立即的:
MATCH (p:F2) WHERE p.name = 'john' RETURN p;
我可以使用cypher这样查询别名属性,并且得到预期的结果,但响应速度很慢:
MATCH (p:F2) WHERE ANY(item IN p.aliases WHERE item = 'big john') RETURN p;
这似乎是查询不是最佳查询或未使用索引。 有人可以建议如何正确执行此操作。我对neo4j和cyper很新:-(
答案 0 :(得分:1)
您可以重构图形以使别名成为节点。因此,任何F2
节点都具有零个或多个别名。
CREATE INDEX ON :Alias(name)
然后您可以使用类似这样的查询...
MATCH (p:F2)-[:HAS_ALIAS]->(:Alias {name: 'big john'})
RETURN p