Neo4j入门操作

最近因为项目建模需要使用到图数据库,搜了一圈,发现Neo4j就不错,于是开始鼓捣。

1. 安装 

下载地址:https://neo4j.com/download-center/

官方提供了很多可选的下载项,企业版,社区版,桌面版。这里我下的是桌面版。

 

然后就是按照安装步骤安装完成。,打开桌面版,就长这样.

2. 使用入门

2.1数据库创建和启动

这里我们新建一个项目,然后点击Add Graph 新建一个本地的图数据库:

然后start一下,启动数据库,manage-> open  browser

成功进入数据库。

2.2 新建节点和关系

官方有两个例子,其中一个就是Movie的图关系建模。

编辑器文本框输入:play movies 就可以查看这个demo。

然后我们根据步骤到create 这里,copy一下cypher语句,因为篇幅较长我们这里就截取一部分。

CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})
CREATE (Laurence:Person {name:'Laurence Fishburne', born:1961})
CREATE (Hugo:Person {name:'Hugo Weaving', born:1960})
CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967})
CREATE (LanaW:Person {name:'Lana Wachowski', born:1965})
CREATE (JoelS:Person {name:'Joel Silver', born:1952})
CREATE
  (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
  (Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
  (Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
  (Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
  (LillyW)-[:DIRECTED]->(TheMatrix),
  (LanaW)-[:DIRECTED]->(TheMatrix),
  (JoelS)-[:PRODUCED]->(TheMatrix)

CREATE (Emil:Person {name:"Emil Eifrem", born:1978})
CREATE (Emil)-[:ACTED_IN {roles:["Emil"]}]->(TheMatrix)

 

然后我们查询一下:

WITH TomH as a
MATCH (a)-[:ACTED_IN]->(m)<-[:DIRECTED]-(d) RETURN a,m,d LIMIT 10
;

可以看到节点间的关系图形化界面:

当然如果你想查看跟某个节点相关的其他节点,可以选中节点并展开它,点击即可:

 

2.3 常见语法

Neo4j的操作语言称为cyher,跟sql是一个道理。

除上面的create语句以外,Neo4j的cypher语法跟sql一样,涵盖了neo4j数据库CRUD的各个方面,还包括调用存储过程等。

match查询

match 可以不指定节点类型,实体节点用“()” 包裹起来,如“(a:movie)”表示一个movie类型的节点,在进行条件过滤时,可以直接在实体后面指定属性或者配合where 语句使用。

如:match(a:movie{name:'Avatar'}) 和 match (a:movie) where a.name = 'Avatar' 实现的是相同的功能。

关系节点用“[]”包裹起来,如 (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix)语句中的ACTED_IN 关系。在图中,它被抽象成实体节点间的一条有向边,因此,创建关系时需要指定关系的方向。关系也可以指定属性,比如[:ACTED_IN {roles:['Neo']}]

在图中,求最短路是一个非常常用的操作,这里用shortestpath()函数来求最短路,该函数只返回一条,如果需要求所有最短路,可以用allshortestpath()函数。例如下面求最短路的语句:

MATCH (a:Column),(b:Column) where a.name='username'and b.name='content'

match p = shortestpath((a)-[*]-(b)) return a,b,p

更多cypher语法请参考:https://neo4j.com/docs/cypher-refcard/current/

此外,如果遇到不清楚的,neo4jdesktop 提供了帮助文档:

比如像查看cypher 的语法,可以使用如下一些命令:

2.4 . java API操作neo4j

和其他数据库一样,neo4j同样提供java api用于编程操作。以maven 项目为例,简述一下操作的基本流程:

maven 依赖:

<!-- https://mvnrepository.com/artifact/org.neo4j.driver/neo4j-java-driver -->
<dependency>
    <groupId>org.neo4j.driver</groupId>
    <artifactId>neo4j-java-driver</artifactId>
    <version>1.6.2</version>
</dependency>
public class Neo4jDriver {
    private Driver driver;
    private static org.apache.log4j.Logger logger = Logger.getLogger(JDBCToSpark.class);
    private static String NEO4J_CONFIG_PATH = "src/main/resources/sys/config/Neo4j.properties";

    public Neo4jDriver() {
        Properties properties = new Properties();
        try {
            properties.load(new FileInputStream(NEO4J_CONFIG_PATH));
        } catch (IOException e) {
            logger.error("can not find config file for neo4j.");
        }
        driver = GraphDatabase.driver(properties.getProperty("uri"), AuthTokens.basic(properties.getProperty("user"), properties.getProperty("passwd")));
    }

    /**
     * run create statements
     *
     * @param txt
     * @return
     */
    public StatementResult exeStatement(String txt) {
        Session session = driver.session();
        Transaction transaction = session.beginTransaction();
        StatementResult result = transaction.run(txt);
        transaction.success();
        session.close();
        return result;

    }

    /**
     * explicitly call this method to stop the driver instance
     */
    public void stop() {
        driver.closeAsync();
    }

    public static void main(String[] args) {
        Neo4jDriver driver = new Neo4jDriver();
        StatementResult result = driver.exeStatement("MATCH (c)<-[:COLUMN_OF]-(a) return a,c");
        while (result.hasNext()) {
            System.out.println(result.next());
        }
        driver.stop();
    }

}

至于路径遍历等,大家就自己下去摸索吧。

为方便修改,我们写了一个配置文件,配置如下:

uri=bolt://localhost:11004
user=neo4j
passwd=***

以上就是Neo4j基本的入门级操作和java api调用方式,希望看这篇文章的人对于Neo4j有一个初步的了解。

  • 26
    点赞
  • 175
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: "neo4j 3.x入门经典"是一本关于Neo4j图形数据库的入门经典教程,旨在帮助初学者快速了解Neo4j的基本概念和使用方法。 该PDF从一个非技术背景的角度开始,向读者介绍图形数据库和Neo4j的基础知识。随着阅读的深入,它逐渐介绍了Neo4j的各种功能和高级用法,包括图形建模、查询语言Cypher、索引和性能优化等。 这本书结构清晰,内容易于理解。读者可以按照自己的需要和兴趣选择性阅读,从入门到精通逐步提升对Neo4j的理解和应用能力。 读者将会了解到如何在Neo4j中创建节点和关系,如何使用Cypher语言进行复杂查询,如何优化图形数据库的性能,以及如何将Neo4j集成到现有的应用程序中。 此外,该书还提供了大量的实际示例和练习,帮助读者巩固所学知识,并将其应用到实际场景中。通过实际操作和实践,读者可以更好地理解Neo4j的优势和应用场景。 总之,"neo4j 3.x入门经典"是一本很好的入门教程,适用于对Neo4j感兴趣的初学者。阅读这本书后,读者将能够掌握Neo4j的基本概念和使用方法,为后续深入学习打下坚实的基础。 ### 回答2: 《Neo4j 3.x入门经典》是一本关于图数据库Neo4j入门指南,提供了详细的介绍和实践案例。该书主要包含以下内容: 首先,该书介绍了图数据库的基本概念和背景知识,让读者了解为什么选择Neo4j以及图数据库的应用场景。这样的介绍对于初学者来说很有帮助,可以让他们更好地理解Neo4j的优势和价值。 其次,该书详细讲解了Neo4j的安装和配置过程。通过指导读者一步步地安装和设置Neo4j,确保他们能够正确地使用该数据库。这一部分还包括了一些常见问题和解决方案,帮助读者克服安装和配置过程中可能遇到的困难。 接着,该书介绍了Neo4j的基本操作和常用命令。读者可以学习如何创建、读取、更新和删除节点和关系,以及如何使用Cypher查询语言进行高级查询。这些操作是使用Neo4j进行数据操作的基础,对于掌握Neo4j很重要。 最后,该书提供了一些实际案例和项目示例,帮助读者将所学的知识应用到实际项目中。通过这些案例,读者可以了解如何使用Neo4j解决实际问题,以及如何将Neo4j与其他工具和技术集成。 总的来说,《Neo4j 3.x入门经典》是一本很好的入门指南,适合初学者和想要深入学习Neo4j的人阅读。它将图数据库的基本概念和操作讲解得很清晰,同时还提供了实践案例,帮助读者将所学应用到实际项目中。不仅能够帮助读者快速上手Neo4j,还能够让他们更好地理解和掌握图数据库的优势和应用。 ### 回答3: "neo4j 3.x入门经典 pdf" 是指一本以Neo4j图数据库为主题的入门经典教程的PDF电子书。这本书主要介绍了Neo4j 3.x版本的图数据库的基本概念、使用方法和实践技巧。 Neo4j是一种图数据库,它以图的形式存储数据,并通过节点和关系的连接来表示数据之间的关系。相比传统的关系型数据库,Neo4j在处理复杂结构化数据和查询路径中的高效性方面具有显著的优势。 这本入门经典的PDF教程首先介绍了图数据库的概念和优势,并详细解释了Neo4j图数据库的基本原理和数据表示。它涵盖了如何安装和设置Neo4j数据库以及如何使用Cypher查询语言进行数据操作和检索。 此外,该教程还提供了丰富的实例和案例,帮助读者更好地理解Neo4j的实际应用。它介绍了如何创建节点、建立关系、进行复杂查询、执行事务等操作,以及如何使用Neo4j的可视化工具对图进行可视化和分析。 这本教程适合那些对图数据库和Neo4j有兴趣的初学者,也适合已有关系型数据库经验的人员想要掌握图数据库的知识。通过学习这本教程,读者可以快速入门Neo4j图数据库,并在实际项目中应用到自己的工作中。 总之,"neo4j 3.x入门经典 pdf" 是一本介绍Neo4j图数据库基础知识和实践技巧的电子书,对于想要学习和应用Neo4j的人来说,是一本非常实用的参考资料。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值