Neo4j 初体验

最近项目中新功能中需要用到知识图谱的功能。

通过简单的了解,知识图谱其数据的主要形式,是以数据、关系存储。

这样比较符合 NOSQL 的,推荐使用的是图数据库 Neo4j 。

折腾了几天下来,安装了环境,并实现基本的代码连接、操作功能。

一、安装

Neo4j 的安装还是挺方便快捷的,也比较简单。

Windows 安装

1、下载

直接在官网下载,根据自己需求下载对应版本。

下载安装官方地址。

  a、下载压缩包文件

  b、解译到对应目录

2、启动服务

1、Install service
bin\neo4j install-service

2、Update service
bin\neo4j update-service

3、Start service
bin\neo4j start

4、查看状态
bin\neo4j status

5、Restart service
bin\neo4j restart

Linux 安装

Linux 的安装基本同 Windows 的安装,一样下载、解压、启动服务。

在下载时会跳转到对应的安装帮助页面,在这里也有具体的操作指示。

配置修改

在安装目录下找到conf目录下的neo4j.conf文件,修改相应配置如下:
# 修改第22行load csv时l路径,在前面加个#,可从任意路径读取文件 #dbms.directories.import
=import
# 修改54行,去掉改行的#,可以远程通过ip访问neo4j数据库 dbms.connectors.default_listen_address
=0.0.0.0

# 默认 bolt端口是7687,http端口是7474,https关口是7473,不修改下面3项也可以 # 修改71行,去掉#,设置http端口为7687,端口可以自定义,只要不和其他端口冲突就行 dbms.connector.bolt.listen_address=:7687 # 修改75行,去掉#,设置http端口为7474,端口可以自定义,只要不和其他端口冲突就行 dbms.connector.http.listen_address=:7474 # 修改79行,去掉#,设置http端口为7473,端口可以自定义,只要不和其他端口冲突就行 dbms.connector.https.listen_address=:7473

# 修改245行,去掉#,允许从远程url来load csv dbms.security.allow_csv_import_from_file_urls=true

# 修改265行,设置neo4j可读可写 dbms.read_only=false

上面的行数只供参考,版本不一样行数不一样

二、3.x 和 4.x 区别

1、JDK 版本差异

3.x 使用的的 JDK 8(1.8)

4.x 使用的是 JDK11 

所以在安装前查看已有环境的 JDK,再选择合适的版本。

2、库差异

3.x 版本只支持一个库

4.x 版本可以是多库的

三、.NET 连接操作

.NET 官方开发简介

.NET 开发官方有对应的驱动库使用。

在 NuGet 上面搜索:Neo4j.Driver 

在项目中引入即可,基本的使用如下:

    [Route("[controller]")]
    [ApiController]
    public class Neo4jTestController : ControllerBase
    {
        private readonly IDriver driver;
        private readonly string url = "bolt://localhost:7687";
        private readonly string userName = "neo4j";
        private readonly string password = "neo4j";

        public Neo4jTestController() 
        {
            driver = GraphDatabase.Driver(url,AuthTokens.Basic( userName, password));
        }

        // GET: api/<Neo4jTestController>
        [HttpGet]
        async public IAsyncEnumerable<string> Get()
        {
            List<string> result = new List<string>();
            using (IAsyncSession session = Neo4jDriverLifecycle.Driver.AsyncSession(o => o.WithDatabase("neo4j")))
            {
                IResultCursor cursor = await session.RunAsync("MATCH (a:Person) RETURN a.name as name");
                result = await cursor.ToListAsync(record => record["name"].As<string>());
            }
            yield return string.Join(",", result);
        }
    }

Neo4j.Driver  是可以向下兼容的,不过有一点需要注意。

注意:数据库使用

3.x 只有一个数据库,所以在使用时有一句代码需要修改:

IAsyncSession session = Neo4jDriverLifecycle.Driver.AsyncSession()

把 WithDatabase 去掉,否则会报错:

Neo4j.Driver.ClientException: Driver is connected to a server that does not support multiple databases.

 

参考:

官方操作手册

官方开发文档

Neo4j.Driver 源码

Neo4j.Driver API(不是最新,更新到4.2)

posted @ 2021-12-24 15:00  漠里  阅读(300)  评论(0编辑  收藏  举报