首页 文章

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

提问于
浏览
1

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

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

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

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

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

我现在遇到的问题是我没有找到一种方法来编写一个不需要类似的查询

MATCH n
WHERE Person.name = "some name"

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

WHERE propertyName = "propertyValue"

因为我只知道 Value 但不知道 properties 的名称 .

3 回答

  • 1

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

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

    到你的有效载荷,你得到节点和关系 .

  • 0

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

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

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

  • 0

    所以,你有查询返回字符串数组 .

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

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


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

相关问题