【问题标题】:Searching Multiproperties on JanusGraph在 JanusGraph 上搜索多属性
【发布时间】:2018-03-08 19:46:34
【问题描述】:

我有一个关于基数为 Multiple 的属性的问题。当我使用具有基数列表或集合的属性时,我可以使用 BerkleyDB 搜索它吗?还是需要索引?我也可以对其进行 NotIn 和或 IN 操作吗?例如,如果我的属性包含数据 [1,2,3] 我可以在 [1,2,3] 或 [4] NotIn [1,2,3] 中执行 [2]

【问题讨论】:

    标签: gremlin janusgraph


    【解决方案1】:

    无论选择何种存储后端,您都可以查询列表/集合属性。您应该使用索引来提高性能,因为它需要在没有图形索引的情况下进行完整扫描(您将看到 WARN 消息)。 without() 操作也需要全面扫描。

    gremlin> [ JanusGraph.version(), Gremlin.version() ]
    ==>0.2.0
    ==>3.2.6
    gremlin> graph = JanusGraphFactory.build().
    ......1>     set('storage.backend', 'berkeleyje').
    ......2>     set('storage.directory', '/tmp/berkeleyje').
    ......3>     open()
    ==>standardjanusgraph[berkeleyje:/tmp/berkeleyje]
    
    gremlin> mgmt = graph.openManagement()
    ==>org.janusgraph.graphdb.database.management.ManagementSystem@32b0876c
    gremlin> nums = mgmt.makePropertyKey('nums').
    ......1>     dataType(Integer.class).cardinality(Cardinality.LIST).make()
    ==>nums
    gremlin> numsIdx = mgmt.buildIndex('numsIdx', Vertex.class).
    ......1>     addKey(nums).buildCompositeIndex()
    ==>numsIdx
    gremlin> mgmt.commit()
    ==>null
    
    gremlin> g = graph.traversal()
    ==>graphtraversalsource[standardjanusgraph[berkeleyje:/tmp/berkeleyje], standard]
    gremlin> g.addV().
    ......1>     property(VertexProperty.Cardinality.list, 'nums', 1).
    ......2>     property(VertexProperty.Cardinality.list, 'nums', 2).
    ......3>     property(VertexProperty.Cardinality.list, 'nums', 3)
    ==>v[4136]
    gremlin> g.addV().property(VertexProperty.Cardinality.list, 'nums', 4)
    ==>v[8232]
    gremlin> g.V().valueMap(true)
    17:53:44 WARN  org.janusgraph.graphdb.transaction.StandardJanusGraphTx  - Query requires iterating over all vertices [()]. For better performance, use indexes
    ==>[label:vertex,nums:[1,2,3],id:4136]
    ==>[label:vertex,nums:[4],id:8232]
    gremlin> g.V().has('nums', within(2))
    ==>v[4136]
    gremlin> g.V().has('nums', without(4))
    17:53:45 WARN  org.janusgraph.graphdb.transaction.StandardJanusGraphTx  - Query requires iterating over all vertices [(nums <> 4)]. For better performance, use indexes
    ==>v[4136]
    

    【讨论】:

      猜你喜欢
      • 2012-12-05
      • 1970-01-01
      • 2016-03-28
      • 2012-08-02
      • 2014-11-02
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多