首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于查找交叉点的良好图形数据库(Neo4j?帕加索斯?快板?...)

用于查找交叉点的良好图形数据库(Neo4j?帕加索斯?快板?...)
EN

Stack Overflow用户
提问于 2011-05-07 01:42:52
回答 2查看 1.7K关注 0票数 4

我正在寻找一个好的图形数据库来查找集合交集--获取任意两个节点并查看它们的边端点是否“重叠”。社交网络的类比将是两个人看两个人,看看他们是否连接到同一个人。

我试图让FlockDB (来自推特的人)工作,因为交集函数是内置的,但我发现在用户社区/支持方面没有太多。那么,其他图形数据库有什么建议吗,特别是在我正在寻找的交集功能已经存在的情况下...?

EN

回答 2

Stack Overflow用户

发布于 2011-05-09 10:25:30

这不就是长度为== 2的两个节点之间的最短路径吗?

在Neo4j中,您可以使用GraphAlgoFactory中的shortestPath()查找器来执行此操作。

票数 2
EN

Stack Overflow用户

发布于 2011-07-19 05:06:45

这将告诉您是否存在连接:

代码语言:javascript
复制
Node from_node = index.get("guid", "user_a").getSingle();
Node to_node = index.get("guid", "user_b").getSingle();
if(from_node != null && to_node != null) {
  RelationshipExpander expander = Traversal.expanderForAllTypes(Direction.BOTH);
  PathFinder<Path> finder = GraphAlgoFactory.shortestPath(expander, 2);
  if(finder.findSinglePath(from_node, to_node) != null) {
    //Connected by at least 1 common friend
  } else {
    //Too far apart or not connected at all
  }
}

这将告诉你谁是共同的朋友:

代码语言:javascript
复制
Node from_node = index.get("guid", "user_a").getSingle();
Node to_node = index.get("guid", "user_b").getSingle();
if(from_node != null && to_node != null) {
  RelationshipExpander expander = Traversal.expanderForAllTypes(Direction.BOTH);
  PathFinder<Path> finder = GraphAlgoFactory.shortestPath(expander, 2);
  Iterable<Path> paths = finder.findAllPaths(from_node, to_node);
  if(paths != null) {
    for(Path path : paths) {
      Relationship relationship = path.relationships().iterator().next();
      Node friend_of_friend = relationship.getEndNode();
    }
  } else {
    //Too far apart or not connected at all
  }
}

这段代码有点粗糙,并且更容易用Cypher表达(取自Neo4J服务器控制台中的Cheet Sheet (填充数据库后使用Neo4J的好方法):

代码语言:javascript
复制
START a = (user, name, "user_a")
MATCH (a)-[:FRIEND]->(friend)-[:FRIEND]->(friend_of_friend)
RETURN friend_of_friend

这将为您提供在之间共享的节点的列表,否则将断开连接的节点。您可以通过CypherParser类将此查询传递给嵌入式服务器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5915047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档