Neo4j入门操作

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

1. 安装 

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

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

Neo4j入门操作_第1张图片

 

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

Neo4j入门操作_第2张图片

2. 使用入门

2.1数据库创建和启动

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

Neo4j入门操作_第3张图片Neo4j入门操作_第4张图片

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

Neo4j入门操作_第5张图片

成功进入数据库。

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
;

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

Neo4j入门操作_第6张图片

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

Neo4j入门操作_第7张图片

 

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 提供了帮助文档:

Neo4j入门操作_第8张图片

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

Neo4j入门操作_第9张图片

2.4 . java API操作neo4j

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

maven 依赖:



    org.neo4j.driver
    neo4j-java-driver
    1.6.2
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有一个初步的了解。

你可能感兴趣的:(Neo4j)