图数据库neo4j的使用_第1页
图数据库neo4j的使用_第2页
图数据库neo4j的使用_第3页
图数据库neo4j的使用_第4页
图数据库neo4j的使用_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文档名称 文档密级2018-7-26 华为保密信息,未经授权禁止扩散 第 1 页 , 共 8 页图数据库Neo4J 的使用吴斌 2013.7.5 1,图数据库Neo4J的介绍:/learn/neo4jNeo4J是个开源的图数据,很好用,轻便灵活,嵌入式,功能强大,而且相关资料比较齐全。按照Neo4J 官方网站公布,该数据库可以支持数十亿的节点数:massively scalable, up to several billion nodes/relationships/properties而且支持分布式部署,Master,Slave。对Neo4J 的性能和可用性的介绍:/player/6qUmb/native/autoplay/Neo4J的 CEO有个视频简单介绍Neo4J :/video/560407472,安装:Neo4J的安装使用非常简单。下载一个稳定版本,解压,运行Neo4j.bat (windows版本) 即可。下载地址/download , 目前比较好用的稳定版本是1.9.1。然后可以访问WEB管理界面,地址:http:/localhost:7474/webadmin3,Neo4J 的使用方式包括:1)可以写程序,添加,更新,用JAVA,Python,PHP, .NET等语言都可以实现。2)可以用命令行,添加,更新,查看,Neo4J提供基于WEB 的执行界面,提供类SQL语言执行,这些语言包括Cypher,Gremlin等。 如下图:文档名称 文档密级2018-7-26 华为保密信息,未经授权禁止扩散 第 2 页 , 共 8 页3)可以基于Neo4J提供的WEB UI界面添加,更新节点和关系,如下:4) 可以使用附加工具(ETL)导入数据。也可以从关系数据库中导入数据。/develop/import4,使用JAVA访问Neo4J:学习材料:/develop/java/chunked/stable/tutorials-java-embedded.htmlNeo4J中节点,边,都可以任意添加属性,边(关系)的可以自定义,是个枚举值,举例:文档名称 文档密级2018-7-26 华为保密信息,未经授权禁止扩散 第 3 页 , 共 8 页firstNode = graphDb.createNode();firstNode.setProperty( “message“, “Hello, Node A , “ );secondNode = graphDb.createNode();secondNode.setProperty( “message“, “ The Graph DB World! Node B “ );relationship = firstNode.createRelationshipTo( secondNode, RelTypes.KNOWS );relationship.setProperty( “Reason“, “Use Neo4j for testing Edge , “ );还有一点很重要,Neo4J可以支持自定义节点类,就是说你可以按照你的需要设计Class做节点,也就是说你可以给每个节点增加任意方法,实现任意功能,这个功能的扩展性非常强。而且Neo4J 提供嵌入式程序的能力,你可以把它当做一个Lib来使用,可以在保留其他应用开放方式的情况下,提供图数据库的强大能力。其例子socnet 可以在 Neo4J的网站上查找。5,Cypher介绍:Cypher是Neo4J自己提供的一种高效类SQL语言,用于图数据和关系查询。关系查询采用一种模式匹配的方式,比较直观。很好的学习材料:/learn/cypher这个Video讲的很清楚:/video/50389825创建节点:(每个Node,系统会自动建立一个唯一的id,不可修改。下面的ID是Node 的属性。)create n=name:Motion,ID:M001 return n;创建关系:start n=node(14),m=node(20) create m-r:KNOWS-n return r;查询:按id查询(这里的id是系统自动创建的) :start n=node(20) return m;文档名称 文档密级2018-7-26 华为保密信息,未经授权禁止扩散 第 4 页 , 共 8 页查询所有节点:start n=node(*) return n;查询属性,关系:start n=node(9) return n,,n.ID,n.level; /查看指定节点,返回需要的属性start n=node(*) match (n)-r:SubClassOf-m return m,n,,n.ID,r; /查找指定关系按关系查询多个节点:start a = node(14) match b-ra return r,b;start a = node(0) match c-:KNOWS-b-:KNOWS-a return a,b,c; /查找两层KNOWS关系的节点start a = node(21) match b-*-a return a,b; /查找所有与a节点有关系的节点使用Where条件进行查询:(不用建立Index也可以使用)start n=node(*) where =“Activity“ return n;并且可以使用特定符号:start n=node(*) where n.ID?=“A*“ return n; start n=node(*) where HAS(n.type) return n,,n.ID,n.type; /如果存在属性type,并且以A开头,就输出节点。配置文件自动建立索引:修改conf 目录下的perties文件内容如下,重启Neo4J,对重启后新建的Node 生效。# Enable auto-indexing for nodes, default is falsenode_auto_indexing=true# The node property keys to be auto-indexed, if enablednode_keys_indexable=name,ID文档名称 文档密级2018-7-26 华为保密信息,未经授权禁止扩散 第 5 页 , 共 8 页# Enable auto-indexing for relationships, default is falserelationship_auto_indexing=true# The relationship property keys to be auto-indexed, if enabledrelationship_keys_indexable=KNOWS,SubClassOf建立索引后可以用node_auto_index 按属性值查询:start n=node:node_auto_index(name=“C“) return n,;修改属性值:start a = node(*) where =“a“ set =“A“ return a, ;start n=node(0) set =“Root“,n.ID=“001“ ; /给默认的根节点添加name,ID 属性,便于查询。删除:删除所有节点和关系:START n=node(*) match n-r-()delete n,r;6,图形化显示数据:Neo4J自身提供WEB界面的图数据图形化展现工具,很Cool。这个Video讲的具体:/video/58016492在WEB管理http:/localhost:7474/webadmin的“Data Browser”图形化显示区点Style,NewProfile,编辑自己的Profile ,注意Add filter的 Nodes要放在前面,不然不生效,Rules是顺序执行的,显示多个属性可以用 ;号做换行符。文档名称 文档密级2018-7-26 华为保密信息,未经授权禁止扩散 第 6 页 , 共 8 页看我做的一个User Model Ontology 关系模型:User Model 与数据源的 Ontology关系,左边圆圈是UserModel,右边方框是数据源:文档名称 文档密级2018-7-26 华为保密信息,未经授权禁止扩散 第 7 页 , 共 8 页在Data Browser上直接输入节点编号,如10,点图形化显示,就可以图形化看到该节点和有关系的节点,点每个节点,就可以逐步显示所有节点和关系,非常方便:7,备份Neo4j的数据:1)停掉数据库.2)备份D:Neo4Jneo4j-enterprise-1.9.1data目录下graph.db目录中的所有内容.文档名称 文档密级2018-7-26 华为保密信息,未经授权禁止扩散 第 8 页 , 共 8 页3)在服务器上拷贝graph.db 目录中的内容到新的服务器的相同目录中,启动即可.8,为什么使用图数据库?这个问题,欢迎你跟我交流。图数据库的扩展性,灵活性非常好,适合用于复杂关系管理和关系查询推理,社交关系应用就是一个可选的应用场景。 而我选择图数据库,起因是研究语义网和Ontology的应用,语义网和 Ontology的数据结构(三元组)就是图结构数据,而基于RDF 构建的语义网,过于复杂,效率很低,实际上不如基于图数据库的构建方便好用,而且Neo4J支持RDF ,SPARQL等扩展。另外,我认为OWL,实用价值不大,OWL 几乎就是用XML来描述一种面向对象的编程语言,而这种编程语言如果表示能力过强(OWL Full),根本无法实现,如果表示能力过弱(OWL Lite ),其实没有多少实用意义。而且,我觉得Tim Berners-Lee 的语义网,即基于RDF 的语义WEB ,用RDF描述语义的这种思路走向了以前基于规则的NLP的思路,虽然加上Human Computation 众包的模式,但还是很难走通。我更关注的是本体关系,知识库的构建,而且知识本体主要是Meta Data ,不需要很多数据,尽量不要保存instance data,获取instance data可以关联其他数据库的数据源进行查询(这种数据Key-Value 或Table保存即可)。简单的关系推理,属性传递,其实就是查询,Neo4J中Cypher 也可以完成。所以,我倾向于用图数据库来构建知识库knowledge base (“KB“),或knowledge graph (“KG“)。知识库对于知识关联查询进行相关搜索或关联推荐,比较有价值。而且,从知识本体关系库中可以推理得到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论