1. 定义
Web API/RESTful API是访问和集成外部数据源又一种常用的接口。目前,很多网站和应用服务都提供类似开放接口供其他应用读取其数据,而这些接口都使用JSON
[1]
作为数据格式。
APOC提供导入JSON格式数据的相关过程,支持从URL读取数据内容并转换成MAP结构的表示以方便在Cypher查询中使用。Cypher可以很方便地将嵌套的文档结构转换成属性图结构。
APOC同时还支持JSON Path
[1]
,即以特定模式搜索JSON文档中的数据项并返回其内容,其概念类似应用于XML的XPath和应用于HTML的jQuery。JSON Path的语法规则如下:
操作符
|
描述
|
$
|
JSON文档的根节点,这也是任何JSON Path的起始操作符。
|
@
|
当前节点。
|
*
|
通配符。
|
..
|
搜索任意深度的子结构
/子节点。
|
.<name>
|
直接孩子节点,以小数点
(.)符号引用
|
['<name>' (, '<name>')]
|
直接孩子节点,以方括号
([])引用
|
[<number> (, <number>)]
|
数组内的元素
|
[start:end]
|
数组内指定范围的元素
|
[?(<expression>)]
|
过滤条件表达式。表达式的结果必须是布尔值。
|
例如,对于以下的JSON文档和JSON Path例子:
J
S
O
N
|
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}
|
更多说明请参见JSON Java Implementation by Jayway(
https://github.com/json-path/JsonPath
)。
2. 应用
读取JSON数据(来自文件或URL),用于数据迁移、集成和转换等目的。
过程调用接口 – apoc.load.json
过程接口
|
CALL
apoc.load.json
(
url,
path
{configuration}
)
|
参数名
|
类型
|
缺省值
|
可为空?
|
说明
|
url
|
字符串
|
无
|
否
|
JSON数据源的本地文件路径,或者URL。
|
path
|
字符串
|
NULL
|
是
|
JSON Path用来提取JSON文档中的内容。参见5.6.1中的说明。
|
{configuration}
|
MAP
|
有
|
是
|
导出配置选项。参见下面各行。
|
failOnError
|
布尔值
|
true
|
是
|
在导入过程中如果出错是否停止执行
|
// (1) 通过stackoverflow API读取最近的关于neo4j的问题和回答。
// 参数:- url: stackoverflow API及调用参数
// 返回:问题和回答标题、所有者、创建日期及所有数据项名称
WITH "https://api.stackexchange.com/2.2/questions?pagesize=100&order=desc&sort=creation&tagged=neo4j&site=stackoverflow&filter=!5-i6Zw8Y)4W7vpy91PMYsKM-k9yzEsSC1_Uxlf" AS url
CALL apoc.load.json(url)
YIELD value
UNWIND value.items AS item
RETURN item.title, item.owner, item.creation_date, keys(item)
查看返回的JSON数据内容,可以得到以下的结构(为节省空间,部分内容省略):
"quota_remaining": 282,
"has_more": true,
"items": [
"owner": {
"link": "https://stackoverflow.com/users/11532153/sirui-li",
"reputation": 1,
"profile_image": "......",
"user_type": "registered",
"display_name": "Sirui Li",
"accept_rate":76,
"user_id": 11532153
"comment_count": 0,
"last_editor": {
......
"answers": [
......
......
"link": "......",
"last_activity_date": 1559279740,
"creation_date": 1559277139,
"answer_count": 1,
"title": "......",
"question_id": 56388698,
"tags": [
"neo4j",
"cypher"
......
上述结构中,实际数据内容包含在items数组内,每一项(发布的问题)又包含基本属性如title、link、tags(标签的数组),和嵌套数据项目如owner、answers等。如果我们想按照每个问题的owner的accept_rate进行筛选,仅返回accept_rate>50的那些问题,那么JSON Path可以这样写:$.items[?(@.owner.accept_rate>50)]。完整的例子如下。
// (2) 通过stackoverflow API读取最近的关于neo4j的问题和回答,应用
// JSON Path筛选出accept_rate>50的那些项目。
// 参数:- url: stackoverflow API及调用参数
// 返回:问题和回答标题、所有者、创建日期及所有数据项名称。注意因为使用
// JSON Path返回items中的每一项,value的内容不再包括items数组。
WITH "https://api.stackexchange.com/2.2/questions?pagesize=100&order=desc&sort=creation&tagged=neo4j&site=stackoverflow&filter=!5-i6Zw8Y)4W7vpy91PMYsKM-k9yzEsSC1_Uxlf" AS url
CALL apoc.load.json(
'$.items[?(@.owner.accept_rate>50)]'
YIELD
RETURN value.title, value.owner,
value.creation_date, keys(value)
在提取了JSON中的数据项和值之后,创建对应的节点和关系就是相对容易的事情,这里就不再详述。
重要技巧 | 可以在neo4j.conf中为RESTful API的URL定义别名,方法如下: apoc.json.stackoverflow.url=https://api.stackexchange.com/2.2/questions?pagesize=100&order=desc&sort=creation&tagged=neo4j&site=stackoverflow&filter=!5-i6Zw8Y)4W7vpy91PMYsKM-k9yzEsSC1_Uxlf
那么,上面的例子中对过程的调用会变成: CALL apoc.load.json('stackoverflow') |
该程序将包含图像/标签信息的 json 文件导入到图形数据库 neo4j 中。
它是用 node.js 编写的,需要包,所以使用 npm 安装包,如下所示。 关于如何使用 node-neo4j,请参考。
sudo npm install neo4j@1.x --save
如果在安装后输入以下内容,则会将数据输入到以 localhost:7474 运行的 neo4j 中。
node importData_neo4j.js
需要注意的事项
(当然)是必须在程序运行之前。
当您运行该程序时,它会擦除所有现有数据并将其放回原处。 删除从第 65 行开始的查询语句后,您可以通过仅执行 createImageNode(Image) 在现有数据上添加数据。
笔记和问题
还有一个因为上面的包没有批处理支持,是用coffee脚本编写的。
。 让我们一步一步地学习如何使用它。
// YIELD关键字表示每次导入json数据中的一组数据,即`[...]`中的每一个`{}`
CALL apoc.load.json("file:///data.json") YIELD value as data
// 创建SUB
直接在官网下载安装包安装,解压即可。
下载相应的jar包
apoc 包下载链接: https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases
apoc-3.3.0.1-all.jar
将对应jar包放在安装目录plugins文件目录里,然后conf目录里的neo4j.conf的后面加上
dbms.security.procedures.unrestricted=apoc.*
apoc.import.file.enabled=true
Neo4j not running
出现这种情况, Neo4j没有运行, 但是浏览器仍然可以访问neo4j数据库的情况, 直接执行导入数据后,是无法看到导入的数据库,
其实这种情况下Neo4j仍在运行(否则浏览器是无法然访问的),
这就需要强...
本地Neo4j数据库与服务器Neo4j数据库相差的只是ip地址,如果自己有插入所有节点和关系的代码的情况下更换一下ip地址和账密即可,如若没有源码或者部分节点是手动构建的,如何转移数据就成了问题。笔者通过自带的export json功能进行数据的迁移。
节点与关系导出
分布匹配所有的关系与节点,导出json格式数据,这里限制了显示上限为300,实际导出的文件是包含全部数据的,分别导出node.json与relation.json
数据迁移
使用python的json库导入json数据,同时进
一、Neo4j 1.1 简介相对传统的 Relational Database Management System,比如MySQL,PostgreSQL。Neo4j有以下特点:SQL一样容易查询语言的Neo4j CQL它遵循属性图数据模型它通过使用Apache Lucence支持索引它支持UNIQUE约束它包含一个UI执行CQL指令:Neo4j的数据浏览器它支持完整的ACID(原子性,一致性,隔离...
1.将excel的数据存入neo4j
本程序使用Jupyter运行,若使用pycharm还需安装py2neo
pip install py2neo==5.0b1 注意版本,要不对应不了
文档:https://py2neo.org/v4/index.html
在第一个文件中
用panda读取excel中的数据
将取出的数据中的实体去重,另外保存到变量中,最终用于创建结点:例中data_extraction()
将读取到的数据抽取需要的列,再次拼成dataframe,最终用于创建关系:例中relation_
https://github.com/neo4j-contrib/neo4j-apoc-procedures
注意neo4j软件版本要与APOC插件匹配,否则启动neo4j可能报错
apoc version
neo4j version
4.0.0.16#
4.0.6 (4.0.x)
1.定义
CSV是最常用的数据交换格式,被各类应用广泛使用。Neo4j提供IMPORT数据导入命令行工具(neo4j-admin import,只能离线使用),以及在Cypher中提供LOAD CSV来实现从CSV文件中导入数据到数据库中。
APOC的CSV导入过程则提供了更丰富的特性:
为每行增加了行号
为每行提供了MAP和LIST两种数据表示
自动的数据类型转换(包含分解列表到数组)
保持字串原始格式的选项
忽略字段的选项
没有标题的文件...
2、Cypther load csv语句,对csv格式的数据进行读取;
3、官方neo4j-import 工具, 目前被neo4j-admin import所替代;
4、batch-import 工具
以上的几种方式各有优劣,对于个人使用中小型数据进行尝试,在数据量和速度上,load和import应该都
APOC是Neo4j 3.3版本推出时正式推荐的一个Java存储过程包,里面包含丰富的函数和过程,作为对Cypher所不能提供的复杂图算法和数据操作功能的补充,APOC还具有使用灵活、高性能等优势。APOC包含函数和过程,是一个基于Neo4j的函数包插件。
它包括:集合操作(排序、最大值、最小值)、图操作、文本搜索、转换、排序、地理空间操作、数据集成、报表、获得表示图的元图。
APOC文档:https://neo4j-contrib.github.io/neo4j-a......
一直以来都想写一些关于Neo4j APOC工具包的使用笔记,不过一直比较忙,最近又需要用到里面的一些东西,决定开始关于APOC笔记的第一步。个人看来,掌握了apoc的使用,cypher水平至少可以提高一倍,开发效率也可以快很多(个人愚见)。下面的笔记都是以linux下的Neo4j 服务器版为准。
官网地址:https://neo4j.com/docs/labs/apoc/current/...