如何使用Cypher在未知的neo4j数据库中找到字符串?

时间:2015-09-16 11:32:10

标签: neo4j cypher

TL,DR:我需要一个查询,它给出了包含特定值的所有节点/关系(在我的例子中是一个字符串,我知道的很多),而不知道哪个属性(键)包含字符串。我正在使用neo4j(最新版本),meteor(最新版本)和流星neo4j驱动程序,这是neo4j网站上推荐的meteor。

目前我正在工作(作为我的学士论文的一部分),用于在任何数据库上可视化任何Cypher查询的输出,无论数据库内容如何。

到目前为止,我已设法正确显示即将发布的节点/关系。我现在的问题是可视化(获取节点和关系以提供给我的前端)文本查询,例如(取自neo4j电影数据库,我用于开发)

MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors)
RETURN coActors.name 

这种查询只返回一个字符串数组,而不是整个节点或关系。我现在需要一些方法(最好是Cypher查询)来获取包含例如字符串&#34; Audrey Tatou&#34;的所有节点。

我现在遇到的问题是我找不到写一个不需要像

这样的查询的方法
MATCH n
WHERE Person.name = "some name"

由于我对数据库的内容一无所知,所以我无法使用

WHERE propertyName = "propertyValue"

因为我只知道值而不知道属性的名称。

3 个答案:

答案 0 :(得分:1)

这里唯一的解决方案是使用您的标签获取每个节点,并使用客户端的反射检查属性和值。

使用cypher,解决方案是获取所有属性及其值,并使用hu循环解析其值。也许你可以做到这一点,但我真的不确定,这是最近的一个功能,但你仍然可以尝试一下。

以下是我为密码解决方案找到的内容:How can I return all properties for a node using Cypher?

答案 1 :(得分:0)

因此,您有查询返回字符串数组。

事实上 - 你几乎可以收到任何结果。 Cypher能够返回与任何东西无关的裸字符串。

长话短说 - 由于这种数据特性,您无法对这些数据进行虚拟化。你可以做的最好的事就是将它们表示为表(或类似的),就像Neo4j浏览器那样。

但是,有(可能)解决方案。 Neo4j具有名为Legacy indexing的功能。在那里你可以找到full text indexes。也许这可以帮到你。

答案 2 :(得分:0)

您可以使用返回节点和rels的驱动程序,或者如果您执行查询,手动添加resultDataContents条目

{statements:[{statement:"MATCH ..","resultDataContents",["graph"]}]}

到你的有效负载,你会得到节点和关系。