Janusgraph学习记录(1)提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
学习Janusgraph的相关记录,全部都是实操,概念不赘述。
一、JanusGraph安装和gremlin基本语法
因为是测试学习gremlin语句的使用,所以试用了janusgraph,总体感觉官方文档有点点小坑,如果想尝试gremlin语句,更推荐hugegraph,感觉更容易上手些。
使用的版本是:janusgraph–full-0.6.1,主要原因是预先配置了 Cassandra 和 Elasticsearch,作为存储和检索,适合懒人。通过 WebSocket 连接到 JanusGraph 服务器,具体步骤如下:服务器解压生成的janusgraph–full-0.6.1路径下输入:bin/janusgraph.sh start
$ bin/janusgraph.sh start Forking Cassandra... Running `nodetool statusthrift`.. OK (returned exit status 0 and printed string "running"). Forking Elasticsearch... Connecting to Elasticsearch (127.0.0.1:9300)... OK (connected to 127.0.0.1:9300). Forking Gremlin-Server... Connecting to Gremlin-Server (127.0.0.1:8182)... OK (connected to 127.0.0.1:8182). Run gremlin.sh to connect.
示例脚本会顺带启动 Cassandra 和 Elasticsearch。
然后可以在linux环境下,janusgraph–full-0.6.1路径下输入bin/gremlin.sh,运行 Gremlin 控制台,我是参照《图数据库实战》这本书的实例导入了一个小小的数据集到数据库,bin/gremlin.sh -i /$你的文件路径/code/chapter03/scripts/3.1-simple-social-network.groovy,这样更方便上手。
输入g,显示遍历源,确认启动无误。
可以再linux环境中做简单查询,
比如:
g,表示遍历源,时所有遍历的基石,tinkerpop默认都是g,g=graph.traversal().这个变量可自行修改。
V()/E(),操作返回一个包含图中每个顶点/每条边的迭代器。基本的增删改查都得有这步操作。
hasLabel(label),返回匹配指定标签类型的所有顶点和边。
has(key,value),返回匹配指定键-值对的所有顶点或边。
has(label,key,value),返回同时匹配标签类型和指定键-值对的所有顶点或边,功能与g.V().hasLabel(‘person’).has(‘first_name’,‘Ted’)一致
注意:可以多次使用has()操作,相当于and,可同时查多个属性。
out(label)当前点带指定标签的出边,向外的方向。如果括号里不加label,则表示遍历所有出边。
in(label)当前点带指定标签的入边,向内的方向。如果括号里不加label,则表示遍历所有入边。
both(label)同时查找出入边。如果括号里不加label,则表示遍历所有出/入边。
values(keys)返回指定属性值。
valueMap(keys)返回键-值对。
后面的测试都在python上实现,更贴近实战使用。
pycharm的settings里添加gremlin,默认用的最新的包
pip install gremlinpython==3.6.02.测试实例
官网给的实例有问题,有的包导入不对,我稍微调整了一下
from gremlin_python.structure.graph import Graph
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
graph = Graph()
connection = DriverRemoteConnection('ws://192.168.171.77:8182/gremlin', 'g')
# The connection should be closed on shut down to close open connections with connection.close()
g = graph.traversal().withRemote(connection)
# Reuse 'g' across the applicatio
herculesAge = g.V().has('person','first_name','Ted').out('friends').next()
print(herculesAge)
connection.close()
注意,查询语句是基于我先前导入的数据写的,可根据自己导入的数据修改。如果没有数据,是查不出结果的。。。记得查询语句要加.next(),后面会介绍,你先加着试试。
运行,显示点的唯一id值。
到这里,基本的链接和简单的测试就完成了。
欢迎评论区交流一起进步。



