Neo4j Cypher查询 - 使用正则表达式查询属性数组

5

我有一个Neo4j数据库 (2.0.3)。我目前正在使用Cypher在我的数据集上运行一些测试查询。我有一组记录,其中包含一个包含名称数组的属性。我想要能够搜索这个名称数组,并同时使用基本的正则表达式进行搜索。在Cypher中是否可能实现这一点?如果不可能,您建议如何处理?

可以结合以下两个查询进行:

 MATCH (s:Record) WHERE "John" IN s.name RETURN s;
 MATCH (s:Record) WHERE s.name =~ '(?i).*john.*)' RETURN s;

2
Neo4j的旧索引将数组属性视为单个条目,因此如果您需要高性能版本,请查看:http://jexp.de/blog/2014/03/full-text-indexing-fts-in-neo4j-2-0/。 - Michael Hunger
1个回答

12

考虑以下示例数据:

CREATE (:Record {name: ['John', 'Bob']}),
       (:Record {name: ['Alice', 'Johnny']}),
       (:Record {name: ['the johnster', 'Charles']}),
       (:Record {name: ['Danny', 'Josh']})

如果您想查找所有在属性数组name中任何元素与正则表达式匹配的记录,请使用ANY。如果您想查找所有在属性数组name中所有元素都与正则表达式匹配的记录,请使用ALL。我相信您想要前者:

MATCH (s:Record)
WHERE ANY(name IN s.name WHERE name =~ '(?i).*john.*')
RETURN s.name

这将返回:

s.name
John, Bob
Alice, Johnny
the johnster, Charles

2
非常好,谢谢Nicole。以防其他人有这个问题,在我所描述的情况下,ANY是正确的关键字,就像Nicole所说的那样。 - prees

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接