Cypher搜索Neo4J中的所有节点和所有属性

时间:2016-07-16 09:33:30

标签: neo4j cypher

我有一个neo4j实例,其中我有多种类型的节点(标签),每个节点都有自己的一组属性。所以,说我有:

标签"人" with Properties(" Name"," Address"," Father'&#39 ;;) 标签"位置"具有属性("名称","国家","城市")
标签"事件"具有属性("名称","城市","国家")
等等...

现在一种方法是搜索像" xyz"当我知道具体细节时:

说:match(n:Person)其中n.Name =" xyz"返回

我的问题是,是否存在单一的“高效”问题。可以盲目搜索的密码查询。基本上它应该能够搜索所有标签和所有属性,并给我匹配的节点。因此,单个查询匹配' xyz'在我的数据库中包含人物,位置,事件和其他标签的所有属性。

我理解一种方法可能是使用一个非常长的where子句,其中我硬编码我的所有标签及其各自的属性,但我不是在寻找。是否有一个直截了当的neo4j Cypher来做这个?

2 个答案:

答案 0 :(得分:1)

你可以做一个完整的图形扫描当然是O(n)型的东西:

match (n) 
with n, [x in keys(n) WHERE n[x]='xyz'] as doesMatch
where size(doesMatch) > 0
return n

另一种 - 性能更高但也更复杂 - 的方法是实现TransactionEventHandler将所有属性放入旧索引,然后查询该索引。

答案 1 :(得分:1)

请记住,虽然neo4j适合在涉及关系时搜索内容,或者当您可以约束某些标签和属性搜索的节点时,您的搜索类型并不是neo4j的强项。很少有数据库适合这种无所不包的搜索。

您可能需要考虑在neo4j之上添加ElasticSearch层,因为它是用于数据库中任何类型的丰富搜索的工具。