[英]Neo4j / Cypher query based on two unrelated nodes returning one result
下面是我的上下文的概念性示例:
我有一个抽象类,名为: User
(包含id
属性作为String)
我有一个User
指定的子类: FacebookUser
我有一个User
指定的子类: TwitterUser
使用Spring-Data-Neo4j,我将User
为@NodeEntity
。
我创建一个测试类,以便在图中插入FacebookUser
和TwitterUser
。
整个过程发生=>两个节点都插入并且具有_ 类型 _,其中包含子类的完全限定名称。
例如: com.myApp.model.user.FacebookUser
。
现在,我要进行这种密码查询:
检索ID = 123的用户
因此,我必须找到一种更有效的方法来检查所有用户节点( FacebookUser
和TwitterUser
),以便找到唯一的对应记录。
我希望找到一种方法来告诉密码这样的事情:
取得与FacebookUser
匹配的每个索引,与TwitterUser
匹配的每个索引,并检查其中的预期节点
但是我没办法
我当前的查询有效:
@Query("start u=node(*) where has(u.__type__) and u.__type__ =~ '.*User' and has(u.id) and u.id = {0} return u")
这一翻译为:
检查图中的所有节点(我想,根本没有效率),然后保留那些以“ User”结尾的节点(包括FacebookUser和TwitterUser)并检查正确的id
在这种情况下,是否有办法只使用索引节点,而不是扫描整个图?
我正在考虑将_ type _属性重命名为父类的完整限定名称的方法。
我们可以使用SDN轻松做到吗?
实际上,由于SDN似乎使用与该节点关联的Java类名称作为节点的索引名称,因此对于Facebook和Twitter子类型,它仅允许处理一个索引节点: User索引节点。
如果在类上使用@Indexed,则应获取TwitterUser等索引,然后可以将其与查询一起使用。 但是,继承方法存在局限性,有关相关讨论,请参见Spring Data Neo4j-索引和继承 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.