最近一个项目需要用到知识图谱,选用了neo4j图数据库,在这过程中遇到几个坑,记录一下

1.无法登录,疯狂提示“WebSocket connection failure. Due to security constraints in your web browser”

我的测试环境是在docker中运行的,google的办法都是改配置文件中的监听地址什么的,最后也没能找到解决办法。阴差阳错换回3.5.16版本就好了。这个问题我也不确定问题根源,并不是说4.0版本就一定会有这个问题。

2.neo4jClient建立节点,建立关系

种种原因,写数据到neo4j的程序是c#写的。比较常见的驱动有两个,一个是官方的neo4j-dotnet-driver,另一个是第三方的Neo4jClient. 我用的是第三方这个。

最有用的官方文档就这一篇:https://github.com/Readify/Neo4jClient/wiki/cypher-examples

同类型节点建立关系没有问题,比如Person1认识Person2这种,在“Relate two existing users”这块很详细了。

问题就出在非同一类型的节点建立关系的时候,比如Person1拥有Book1这样,使用官方那个sample是不行的。搜遍全网也没找到解决方案,这里记录一下。

如果按照官方文档来写Cypher,是这样的(以官方movie数据库为例)。

MATCH (p:Person), (m:Movie)
WHERE p.name="J.T. Walsh" , m.title="Unforgiven"
CREATE (p)-[r:ACTED_IN]->(m)
return r

执行结果会报错

正确的是这样

MATCH (p:Person), (m:Movie)
WHERE p.name="J.T. Walsh" and m.title="Unforgiven"
CREATE (p)-[r:ACTED_IN]->(m)
return r

与官方文档中同类型节点不同的是,where条件中两个条件中的逗号,改为 "and"

使用Neo4jClient写入的话,同样需要修改一下。

官方sample:

graphClient.Cypher
.Match("(user1:User)", "(user2:User)")
.Where((User user1) => user1.Id == )
.AndWhere((User user2) => user2.Id == )
.Create("user1-[:FRIENDS_WITH]->user2")
.ExecuteWithoutResults();

正确写法(注意CreateUnique后面的d和s必须用小括号包起来,不然也是疯狂报错

 _graphClient.Cypher
.Match("(d:Person)", "(s:Movie)")
.Where((Person d) => d.name =="aaa")
.AndWhere((Movie s) => s.name == "bbb")
.CreateUnique("(d)-[:ACTED_IN{rel}]->(s)")
.WithParam("rel", new { name="扮演" })
.ExecuteWithoutResults();

当然,如果关系不需要有属性的话是这样的,去掉rel就可以了

                             _graphClient.Cypher
.Match("(d:Person)", "(s:Movie)")
.Where((Person d) => d.name =="aaa")
.AndWhere((Movie s) => s.name == "bbb")
.CreateUnique("(d)-[:ACTED_IN]->(s)")
.ExecuteWithoutResults();

目前就这些小坑

Neo4j填坑记录-Neo4jClient建立节点、建立关系相关的更多相关文章

  1. webapp填坑记录[更新中]

    网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...

  2. webapp填坑记录

    网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...

  3. Phoenix踩坑填坑记录

    Phoenix踩坑填坑记录 Phoenix建表语句 如何添加二级索引 判断某表是否存在 判断索引是否存在 Date类型日期,条件判断 杂项 记录Phoenix开发过程中的填坑记录. 部分原文地址:ph ...

  4. Kafka踩坑填坑记录

    Kafka踩坑填坑记录 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 二. 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 在虚拟机上,搭建了3台 ...

  5. Linux踩坑填坑记录

    Linux踩坑填坑记录 yum安装失败[Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.aliyun.com'" ...

  6. F2eTest和uirecorder自动化测试环境部署填坑记录

    坑1:尝试部署的时候只在opennode.bat里面填写了两个浏览器,测试通过后再增加其他浏览器,页面上一直不显示. 填坑:需要清空数据库里的`wd_browsers`和`wd_nodes`表,然后重 ...

  7. 微信小程序发送红包功能。填坑记录

    微信官方文档 1.开通条件 (1)商户号已入驻90日 (2)商户号有连续30天正常交易 (3)只有企业资质的商户才有资格申请 2.注意事项 (1)目前小程序红包仅支持用户微信扫码打开小程序 (2)小程 ...

  8. MVC5项目转.Net Core 2.2学习与填坑记录(1)

    流程都是自己摸索,错误地方随便指正... 老项目过于臃肿,并且所有请求都是提交到一个api中,这样当api挂掉的时候,基本所有的项目都瘫痪掉了. 在4月底的时候,下决心将项目用微服务进行重写,刚开始的 ...

  9. iOS工作小技巧及填坑记录

    以下是本人在iOS开发工作中使用的一些小技巧,记录一下. 1.使用XXX.pch文件便捷开发+加速Build 在IOS开发的项目中有一个XX_Prefix.pch XX_Prefix.pch:扩展名. ...

随机推荐

  1. Docker安装Redis并介绍漂亮的可视化客户端进行操作

    1 简介 Redis是使用ANSI C语言开发的基于Key-Value的高性能NoSQL数据库,在解决高并发.高可用等一系列问题中,它扮演着重要的角色.它的优势主要有: 速度快. 持久化. 原子性. ...

  2. Connections in Galaxy War ZOJ - 3261 (并查集)

    点权并查集的反向离线操作 题目大意:有n个stars,每一个都一定的“颜值”.然后stars与stars之间可以相连,query c表示再与c相连的stars中,颜值比c高的,stars的标号,如果有 ...

  3. 微信小程序 —搜索框

    wxSearch优雅的微信小程序搜索框 一.功能 支持自定义热门key 支持搜索历史 支持搜索建议 支持搜索历史(记录)缓存 二.使用 1.将wxSearch文件夹整个拷贝到根目录下 2.引入 // ...

  4. Java前台传值至后台中文乱码

    记一次常见问题 今天导入了一个网上下载的项目,运行后发现,前台传值 到Servlet,Servlet保存至数据库,数据库保存的中文数据出现乱码,检查了一下表中的编码是utf8没错. 输出测试了一下 原 ...

  5. 详解 Map集合

    (请关注 本人"集合总集篇"博文--<详解 集合框架>) 首先,本人来讲解下 Map集合 的特点: Map集合 的特点: 特点: 通过 键 映射到 值的对象 一个 映射 ...

  6. jest enzyme unit test react

    1. 测试类型 单元测试:指的是以原件的单元为单位,对软件进行测试.单元可以是一个函数,也可以是一个模块或一个组件,基本特征就是只要输入不变,必定返回同样的输出.一个软件越容易些单元测试,就表明它的模 ...

  7. Python代码覆盖率分析工具Coverage

    简介 在测试中,为了度量产品质量,代码覆盖率被作为一种测试结果的评判依据,在Python代码中用来分析代码覆盖率的工具当属Coverage.代码覆盖率是由特定的测试套件覆盖被测源代码的程度来度量,Co ...

  8. 杂园日记-获取URL参数

    function getUrlParams(name, url){ var locationUrl = window.location.search; if(url){ var s =url.inde ...

  9. ES6中不得不说的关键字const

    上一节讲了let关键字,它是用来声明一个变量,只在块级作用域起作用.这一节我们来学习ES6新增的另一个关键字const. const 的作用 const是constant(常量)的缩写,const和 ...

  10. iOS appium

    1.如果没有安装过Homebrew,先安装homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/ ...