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有一个初步的了解。

03-14
### Neo4j 数据库简介 Neo4j 是一种图数据库管理系统,它允许存储和查询节点以及它们之间的关系。这种结构非常适合表示高度互联的数据集,在这些数据集中,实体及其相互作用构成了主要的关注点[^3]。 #### 下载与安装 用户可以从官方部署中心获取 Neo4j 的最新版本以供本地使用[^2]。对于更便捷的环境配置方式,Docker 提供了一种快速启动 Neo4j 实例的方法,这使得开发者可以迅速搭建开发测试环境而无需复杂的依赖管理。 #### 连接与操作 为了实现 Node.js 应用程序对 Neo4j 数据库的操作需求,`node-neo4j` 成为一个重要工具包选项。该驱动支持创建会话、执行 Cypher 查询语句等功能,从而简化了应用层面对图形数据模型交互过程中的技术难度[^1]。 #### 使用场景分析 由于其强大的模式灵活性及高效的路径查找能力,Neo4j 被广泛应用于多个领域之中。特别是在涉及大量关联数据分析的任务里表现突出,比如金融行业的反欺诈系统构建或是电商网站上的个性化商品推荐服务等方面均能看到它的身影。 ```javascript const neo4j = require('neo4j-driver'); // 创建驱动实例 let driver; try { driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("username", "password")); } catch (error) { console.error(error); } async function runQuery() { const session = driver.session(); try { const result = await session.run( 'MATCH (n:Person {name:$name}) RETURN n.age AS age, n.name as name', {name: 'Alice'} ); result.records.forEach(record => { console.log(`${record.get('name')} is ${record.get('age')} years old.`); }); } finally { await session.close(); } } runQuery().catch(console.error); if (driver !== undefined){ driver.close(); } ``` 上述代码片段展示了如何利用 `node-neo4j` 驱动器建立到 Neo4j 数据库的安全连接,并通过 Cypher 查询语言检索特定条件下的记录信息。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值