基于 neo4j 的图关系推荐

推荐系统解决的问题就是,在特定场景 (Context) 下,向某个用户 (User) 推荐某些物料 (Item), 如下图所示

直观来说,就是建立用户到物料的关联关系,那么以 User 和 Item 作为节点,User 在 Item 上的某些行为作为边,构建的图关系,就是一种非常自然的连接。 我们算法团队,在内容详情页相关推荐,引入了图关系,是基于 neo4j 的,取得了很大的效果提升。

部署 neo4j 服务

neo4j 依赖较多,建议通过 docker 进行部署。这里在 Centos 系统中部署,首先安装 docker

yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin

启动 docker 服务

service docker start
service docker status
chkconfig docker on

启动 neo4j 容器

docker run -p 8105:7474 -p 5005:7687\
-v/home/web/neo4j/data:/data\
-e NEO4J_AUTH=neo4j/<your_password> \
-e NEO4J_server_memory_heap_max__size=8G\
-e NEO4J_dbms_memory_transaction_total_max=4G\
--memory="16g" -d neo4j:latest

查看进程 docker ps

查看数据

$ docker logs fe5220939187
Warning: Folder mounted to"/data" is not writable from inside container. Changing folder owner to neo4j.
Changed password for user'neo4j'. IMPORTANT: this change will only take effect if performed before the database is started for the first time.
2023-12-05 02:08:06.105+0000 INFO  Logging config in use: File'/var/lib/neo4j/conf/user-logs.xml'
2023-12-05 02:08:06.128+0000 INFO  Starting...
2023-12-05 02:08:07.230+0000 INFO  This instance is ServerId{c2bfe4a9} (c2bfe4a9-bdee-458f-a22d-55635ac659e8)
2023-12-05 02:08:08.323+0000 INFO  ======== Neo4j 5.13.0 ========
2023-12-05 02:08:10.400+0000 INFO  Bolt enabled on 0.0.0.0:7687.
2023-12-05 02:08:12.628+0000 INFO  HTTP enabled on 0.0.0.0:7474.
2023-12-05 02:08:12.629+0000 INFO  Remote interface available at http://localhost:7474/
2023-12-05 02:08:12.634+0000 INFO  id: CE995C09C684825BCD2271B81D011603461211EC7E45EFFEBF8A0F10C48DCD39
2023-12-05 02:08:12.635+0000 INFO  name: system
2023-12-05 02:08:12.635+0000 INFO  creationDate: 2023-12-05T02:08:09.015Z
2023-12-05 02:08:12.635+0000 INFO  Started.

可以看到 Neo4j 的版本号是 5.13.0。提供了对外访问的地址,由于启动 neo4j docker 容器时,做了端口映射,因此访问地址变为 http://ip:8105。通过浏览器访问,可以看到如下页面

填入相关信息,点击 Connect 就可以连接上图数据库啦!如下图所示,以 UserEntity 和 ItemEntity 为节点,以交互为关系边,节点还有一些属性信息,目前已有 1w+ 节点,3w+ 边。

对外提供服务

利用 cypher 查询语言获取推荐列表,最好加一层 Redis 缓存,降低图数据库负载。

相关推荐