2013-04-11 37 views
3

我正在使用neo4j,存储一个简单的“content has-many tags”数据结构。 我想知道“哪些标签与其他标签共存最多?”如何计算标签到标签的关系而不会爆炸?

我已经有了大约500K的内容到标签的关系,所以不幸的是,这可以解决0.5M^2可能的共存关系,然后你需要计算每种关系发生的次数!或者你呢?我做这个很长的路吗?

它似乎永远不会回来,我的CPU现在已经挂了很长一段时间了。

final ExecutionResult result = engine.execute(
"START metag=node(*)\n" 
+ "MATCH metag<-[:HAS_TAG]-content-[:HAS_TAG]->othertag\n" 
+ "WHERE metag.name>othertag.name\n" 
+ "RETURN metag.name, othertag.name, count(content)\n" 
+ "ORDER BY count(content) DESC"); 
for (Map<String, Object> row : result) { 
System.out.println(row.get("metag.name") + "\t" + row.get("othertag.name") + "\t" + row.get("count(content)")); 
} 

回答

1

你应该尽量减少你的绑定点来加快遍历。我假设你的图形总是会有比标签更多的标签,所以你应该把内容作为你的绑定点。类似于

start 
    content = node:node_auto_index(' type:"CONTENT" ') 
match 
    metatag<-[:HAS_CONTENT]-content-[:HAS_CONTENT]->othertag 
where 
    metatag<>othertag 
return 
    metatag.name, othertag.name, count(content)