Janusgraph index的建立删除总结

Index
一、Statu of index:
1.四种状态:INSTALLED、REGISTERED、ENABLED、DISABLED。
2.操作mixed index时只能有disabled,和registered这两种状态。
二、Action of index:
五种操作:1.REGISTER_INDEX:注册索引,安装索引后必须注册;
mgmt.updateIndex(mgmt.getGraphIndex(‘index’),SchemaAction.REGX)get()
2. REINDEX:重新索引,创建索引时,已存在数据;
3.ENABLE_INDEX:启用索引,必须先注册索引后,才能启用索引;
4.DISABLE_INDEX:停用索引;
5.REMOVE_INDEX:删除索引,但是只能删除composite index。
三、Transaction
第一次操作graph时,janus会自动创建一个事务,所有的事务都要显示的commit()或者rollback()的方式关闭。
graph.Close()关闭的是数据库,而不是关闭事务。在一个事务未提交时,关闭数据库,事务会回滚。
三、Composite Index:
1.依赖存储后端,而不是索引后端
2.只支持对property key的等价查询,如果使用了谓词则不会其作用。
3.支持单属性和多属性的索引,对多属性索引,在查询时只有使用了多个属性才会使用该索引,如果只使用一个属性,则多属性索引不起作用。
4.支持Index Uniqueness(可选):即被索引的property key其值具有唯一性,如:name是唯一复合索引中的key,那么name=zhouliang的的值在全局中最多只能在顶点或边的name属性中出现一次。
5.在具有最终一致性的存储后端上如果要保证属性唯一性,索引的一致性约束就需要开启。

Eg1:创建索引byNameComposite、byNameAndAgeComposite

graph.tx().rollback() //Never create new indexes while a transaction is active
mgmt = graph.openManagement()
name = mgmt.getPropertyKey(‘name’)
age = mgmt.getPropertyKey(‘age’)
mgmt.buildIndex(‘byNameComposite’, Vertex.class).addKey(name).buildCompositeIndex()
mgmt.buildIndex(‘byNameAndAgeComposite’, Vertex.class).addKey(name).addKey(age).buildCompositeIndex()
mgmt.commit()
//Wait for the index to become available
mgmt.awaitGraphIndexStatus(graph, ‘byNameComposite’).call()
mgmt.awaitGraphIndexStatus(graph, ‘byNameAndAgeComposite’).call()
//Reindex the existing data
mgmt = graph.openManagement()
mgmt.updateIndex(mgmt.getGraphIndex(“byNameComposite”), SchemaAction.REINDEX).get()
mgmt.updateIndex(mgmt.getGraphIndex(“byNameAndAgeComposite”), SchemaAction.REINDEX).get()
mgmt.commit()

四、Mixed Index:
1.依赖索引后端进行查询,所以必须配置索引后端,而且JanusGraph可以支持多个索引后端,每个存储后端的名称在配置中必须唯一标识。
2.比复合索引要灵活:多余多属性索引,查询时不需要指定所有属性也会使用索引、支持等值查询和其他查询,支持多条件谓词,支持全文查询、范围查询、geo查询,模糊匹配。但是对于等值查询比复合索引要慢。
可以配置是全文索引(默认):对属性值进行分词,查询时如果匹配的一个词就可以查询到。(全文搜索)
3.或配置成字符串索引:属性值作为整体进行匹配。具体:Index Parameters and Full-Text Search
4.可以为已存在的索引添加新的property key。(方法:addIndexKey)
缺点
5.不支持唯一索引。
6.在建立Mixed Index时需要指定索引后端名称,该名称是JanusGraph配置文件【index..backend】配置项中号代表的值。如果要支持不同的索引后端,则在启动JanusGraph的配置中指定不同索引后端和名称。(即两个配置文件使用不同索引后端)

Eg1:创建名为nameAndAge的Mixed Index索引,并使用配置文件里名称为search的索引后端。
graph.tx().rollback() //Never create new indexes while a transaction is active
mgmt = graph.openManagement()
name = mgmt.getPropertyKey(‘name’)
age = mgmt.getPropertyKey(‘age’)
//age 默认也是Mapping.TEXT类型
mgmt.buildIndex(‘nameAndAge’, Vertex.class).addKey(name,Mapping.TEXT.getParameter()).addKey(age).buildMixedIndex(“search”)
mgmt.commit()
//Wait for the index to become available
mgmt.awaitGraphIndexStatus(graph, ‘nameAndAge’).call()
//Reindex the existing data
mgmt = graph.openManagement()
mgmt.updateIndex(mgmt.getGraphIndex(“nameAndAge”), SchemaAction.REINDEX).get()
mgmt.commit()

Eg2:可以为已存在的mixed index添加新的属性key,那么在后续查询中就可以使用该条件。

graph.tx().rollback() //Never create new indexes while a transaction is active
mgmt = graph.openManagement()
location = mgmt.makePropertyKey(‘location’).dataType(Geoshape.class).make()
nameAndAge = mgmt.getGraphIndex(‘nameAndAge’)
mgmt.addIndexKey(nameAndAge, location)
mgmt.commit()
//Previously created property keys already have the status ENABLED, but
//our newly created property key “location” needs to REGISTER so we wait for both statuses
mgmt.awaitGraphIndexStatus(graph, ‘nameAndAge’).status(REGISTERED, ENABLED).call()
//Reindex the existing data
mgmt = graph.openManagement()
mgmt.updateIndex(mgmt.getGraphIndex(“nameAndAge”), SchemaAction.REINDEX).get()
mgmt.commit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值