使用gremlin语句为janusgraph添加CompositeIndex索引

janusGraph 图中添加索引可以很大幅度地提高检索图的速度。建议在新建schema时就为属性建立索引,否则,如果图中有旧数据,再建立索引 的话就需要为该索引执行重新索引操作。菌子试着做了几次,都没有成功,索引状态一直是installed无法装变为可用状态。关于索引的生命周期可以看下面的图片。

在janusgraph中,如果没有添加索引的话,查询节点

g.V().has('id','001a5a67-8db2-495b-bc74-39b58175f4a1')

的时候,如果没有索引会提示以下警告:

00:20:56 WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [(id = 001a5a67-8db2-495b-bc74-39b58175f4a1)]. For better performance, use indexes

废话不多说,让我们来看看怎么使用gremlin语言添加索引,以janusgraph为例。

janusgraph有多种索引,下面介绍其中的CompositeIndex索引,该索引是建立在图上的,不需要外部索引如Elasticsearch。该索引需要全文匹配,即如果索引建在属性id上,那么只有搜索的id可以完全匹配图里的id时索引才能有效,不支持模糊匹配。

建立索引可以分为以下几步:

第一步:关闭图中正在执行的事务。

需要注意的是,建立索引需要和对应属性在一个事务中进行,否则就需要重新索引,如若不然索引会一直处在installed状态,无法改变

//打开图

graph = JanusGraphFactory.open('conf/gremlin-server/janusgraph-hbase-es.properties');

g=graph.traversal();

mgmt=graph.openManagement();

//查询图中有几个没关的事务

count = graph.getOpenTransactions();

//把所有事务回滚(否则index会出错)

for(i=0;i<count;i++) {graph.getOpenTransactions().getAt(0).rollback()}

第二步:增加索引前需要保证图中存在需要加索引的那个属性。如果没有可以新建这个属性。

graph = JanusGraphFactory.open('conf/gremlin-server/janusgraph-hbase-es.properties');

g=graph.traversal();

mgmt=graph.openManagement();

//新增一个属性

mgmt.makePropertyKey('id').dataType(String.class).cardinality(LIST).make();

第三部:为属性加索引

首先获取该属性,接下来使用buildIndex的buildCompositeIndex添加索引。byIdComposite是索引名,可以随意起,iditem是需要加索引的属性,最后提交事务。

iditem = mgmt.getPropertyKey('id');

mgmt.buildIndex('byIdComposite', Vertex.class).addKey(iditem).buildCompositeIndex();

mgmt.commit()

第四部:等索引变为GISTERED状态

等等,事情还没有完。你还需要等待索引状态变为enable,但是如果试图直接变为enable状态,会出问题,导致变为installed状态,变为installed状态后则不能再转化为enable状态了。这个官网上也没说,也不知道是什么原因,特别坑。需要先等待索引变为REGISTERED,再等待索引状态变为enable。这个过程时间很长,需要耐心等待。

graph = JanusGraphFactory.open('conf/gremlin-server/janusgraph-hbase-es.properties');

g=graph.traversal();

mgmt=graph.openManagement();

mgmt.awaitGraphIndexStatus(graph, 'byIdComposite').status(SchemaStatus.REGISTERED).call()

ManagementSystem.awaitGraphIndexStatus(graph, 'byIdComposite').call()

第四步:等索引变为ENABLED状态,会返回一个状态,为success就建立成功了

ManagementSystem.awaitGraphIndexStatus(graph, 'byIdComposite').status(SchemaStatus.ENABLED).call()

附1:可以用下面的方法查询索引状态

//查询索引状态

mgmt = graph.openManagement()

index = mgmt.getGraphIndex('byid')

index.getIndexStatus(mgmt.getPropertyKey('id'))

附2:可以用下面的方法查看所有索引

mgmt.getGraphIndexes(Vertex.class)

附3:下面是重新索引的方法,有兴趣的小伙伴可以试试,如果成功了,请联系我,大家互相学习,谢谢

mgmt=graph.openManagement();

mgmt.updateIndex(mgmt.getGraphIndex('byIdComposite2'), SchemaAction.REINDEX).get();

mgmt.commit();

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容