【发布时间】:2015-07-05 12:16:55
【问题描述】:
我的Neo4j 1.9.9 实体使用Spring Data Neo4j 存储。不过因为derived queries from repository methods are wrong很多,我只好直接用Cypher
基本上,我有两个类:
@NodeEntity
public class RecommenderMashup {
@Indexed(indexType = IndexType.SIMPLE, indexName = "recommenderMashupIds")
private String mashupId;
}
@RelationshipEntity(type = "MASHUP_TO_MASHUP_SIMILARITY")
public class MashupToMashupSimilarity {
@StartNode
private RecommenderMashup mashupFrom;
@EndNode
private RecommenderMashup mashupTo;
}
众所周知,除了直接提供的索引之外,Spring Data Neo4j 还增加了另外两个索引:__types__ 用于节点,__rel_types__ 用于关系;他们两个都有className作为他们的密钥。
所以,我尝试了下面的查询来获取与特定节点相关的所有 MashupToMashupSimilarity 对象
START `mashupFrom`=node:`recommenderMashupIds`(`mashupId`='5367575248633856'),
`mashupTo`=node:__types__(className="package.RecommenderMashup"),
`mashupToMashupSimilarity`=rel:__rel_types__(className="package.MashupToMashupSimilarity")
MATCH `mashupFrom`-[:`mashupToMashupSimilarity`]->`mashupTo`
RETURN `mashupToMashupSimilarity`;
但是,我总是得到空结果。我怀疑这是因为START 子句同时包含节点和关系。这可能吗?否则,这里可能有什么问题?
其他信息
嫌疑人来自
START `mashupToMashupSimilarity`=rel:__rel_types__(className='package.MashupToMashupSimilarity')
RETURN `mashupToMashupSimilarity`;
和
START `mashup`=node:__types__(className="package.RecommenderMashup")
RETURN `mashup`;
和其他类似的查询总是返回正确的结果。 目前唯一可行的选择是
START `mashupFrom`=node:`recommenderMashupIds`(`mashupId`='6006582764634112'),
`mashupTo`=node:__types__(className="package.RecommenderMashup")
MATCH `mashupFrom`-[`similarity`:MASHUP_TO_MASHUP_SIMILARITY]->`mashupTo`
RETURN `similarity`;
我都不知道它在性能方面是如何工作的(索引应该更快)。另外,我很好奇我做错了什么。
【问题讨论】:
标签: neo4j cypher spring-data-neo4j