查询操作

3.1 点查询

from ultipa import Connection,ULTIPA_REQUEST
conn = Connection(host='host:port', username="root", password="root")
ret = conn.searchNode(ULTIPA_REQUEST.SearchNode())
print(ret.toJSON())

3.2 边查询

from ultipa import Connection,ULTIPA_REQUEST
conn = Connection(host='host:port', username="root", password="root")
ret = conn.searchEdge(ULTIPA_REQUEST.SearchEdge())
print(ret.toJSON())

3.3 UQL 查询

from ultipa import Connection,ULTIPA_REQUEST
conn = Connection(host='host:port', username="root", password="root")
ret = conn.uql("find().nodes().limit(10).select(*)")
print(ret.toJSON())
ret = conn.uql("find().edges().limit(10).select(*)")
print(ret.toJSON())

3.4 AB路径查询

  • AB路径查询,即在 Ultipa 图系统当中按照指定的深度去查询一个 node 到另一个 node 之间的路径,深度可以是 1 - N。当然,我们也可以将查询深度设置为最短。支持的参数为:

  • 查找 node ( _id = 12) 到 node (_id = 21) 之间 深度小于等于3 的路径,返回5条结果:

    from ultipa import Connection,ULTIPA_REQUEST
    conn = Connection(host='host:port', username="root", password="root")
    ret =  conn.searchAB(ULTIPA_REQUEST.SearchAB(src=12,dest=21,depth=3,limit=5))
    print(ret.toJSON())
    

3.5 K邻查询

  • K邻查询,查找从某个 node 出发最短K步能到达的邻居 nodes,并返回统计数据(数量,和邻居 nodes 集合)。例如,可以通过K邻查询计算某个 node 的第3步邻居的数量, 并返回全部或者部分结果。支持的参数为:

    名称 类型 规范 描述
    src int >0 ,必填 起始 node 的 ID
    depth int >0, 默认值 1 查询的最大深度
    limit int >0, 默认值 1 >0, 默认值 1
    select List[str] / 路径点,边所包含的 property
    select_node_properties List[str] / 路径点所包含的 property
    select_edge_properties List[str] / 路径边所包含的 property
    node_filter filter Ultipa过滤器 对所有点进行过滤(除起始点)
    edge_filter filter Ultipa过滤器 对所有边进行过滤
    direction str left,right 设定边的过滤方向
    osrc str 不可使用src 设置起始 node 原始ID
  • 查找 node (id = 12) 的 1 步邻居,返回10条结果和总计:

    from ultipa import Connection,ULTIPA_REQUEST
    conn = Connection(host='host:port', username="root", password="root")
    ret =  conn.searchKhop(ULTIPA_REQUEST.Searchkhop(src=12,depth=1,limit=10))
    print(ret.toJSON())
    

3.6 自动展开

  • 从一个 node 展开更多数据,展开的方式有为: BFS(广度优先)。Connection 对象提供了 nodeSpread 方法来实现:

    from ultipa import Connection,ULTIPA_REQUEST
    conn = Connection(host='host:port', username="root", password="root")
    ret =  conn.nodeSpread(ULTIPA_REQUEST.NodeSpread(src=12,depth=1,limit=10))
    print(ret.toJSON())
    

3.7 自动组网

  • 图的魅力在于在纷繁复杂的网络当中,可以快速直观的检索出用户所关注的点之间的关联关系,自动组网分为两种模式:

    • N个点,自动两两组网
    • N个点到M个点的自动组网
  • 两种自动组网共享相同的 [参数] 如下:

    名称 类型 规范 描述
    srcs List[int] >0 ,必填 起始 node 的 ID
    dests List[int] >0 结束 nodes 的 ID,若设置此值,将会触发模式2
    depth int >0, 默认值 1 查询的最大深度
    limit int >0, 默认值 1 >0, 默认值 1
    select List[str] / 路径点,边所包含的 property
    select_node_properties List [str] / 路径点所包含的 property
    select_edge_properties List[str] / 路径边所包含的 property
    shortest / / 返回最短路
    node_filter filter Ultipa过滤器 对所有点进行过滤(除起始点)
    edge_filter filter Ultipa过滤器 对所有边进行过滤
    turbo / / 启动加速模式
    no_circle / / 两点路径避免环路
  • 将 nodes( id = [12,21,30,40]) 的四个点组成一张网,每2个点之间返回2条路径,每条路径的深度设为3。

    from ultipa import Connection,ULTIPA_REQUEST
    conn = Connection(host='host:port', username="root", password="root")
    ret = conn.autoNet(ULTIPA_REQUEST.AutoNet(srcs=[12,21,30,40],depth=3,
                                          limit=2,select=['name','age']))
    print(ret.toJSON())
    

3.8 模板查询

  • 模板查询,即在图系统当中,按照一定的匹配规则查询一张子图,并返回部分或者全部数据, 用户可以规定从哪些起始 node 出发,经过怎样的边和点,每一步如何过滤和筛选,最终达到一个定义好的结束 node。

  • 通过模板查询,用户可以灵活的根据业务需求,组装子图的抽取模式。在模板查询中我们将会提到一个新的概念,alias (别名),下文中会有详细介绍。

  • 模板查询的 [命令] 为 t(),t代表 template(模板)的 缩写

  • 模板查询的 [参数] 以及 [返回] 稍微有些不同,这部分将会分小节来描述使用方式。

  • 下面先列举模板所支持的参数

    名称 类型 规范 描述
    limit int >0 ,必填 模板路径匹配结果限制
    n 点模板 / 详见点模板章节
    e 边模板 / 详见边模板章节
  • Python AIP 调用

    from ultipa import Connection,ULTIPA_REQUEST
    conn = Connection(host='host:port', username="root", password="root")
    item1 = ULTIPA_REQUEST.TemplateNodeItem(name=ULTIPA_REQUEST.TNodeItem.n, alias='n1')
    item2 = ULTIPA_REQUEST.TemplateEdgeItem(name=ULTIPA_REQUEST.TEdgeItem.e, alias='e')
    item3 = ULTIPA_REQUEST.TemplateNodeItem(name=ULTIPA_REQUEST.TNodeItem.n, alias='n2')
    req = ULTIPA_REQUEST.Template(alias='p', items=[item1, item2, item3], 
    		limit=5,_return=['p', 'n1', 'e', 'n2'])
    ret = conn.template(request=req)
    print(ret.data.toJSON())
    
  • uql 调用

    from ultipa import Connection,ULTIPA_REQUEST
    conn = Connection(host='host:port', username="root", password="root")
    ret = conn.uql("t(p).n(n1).e(e).n(n2).limit(5).return(p,n1,e,n2)")
    print(ret.toJSON())