(三)Neo4j自带northwind案例--Cypher语言应用

0、概述

通过该案例,应用Cypher查询语言,感受Neo4j套路。官方的用此案例的用意:

The Northwind Graph demonstrates how to migrate(迁移) from a relational database to Neo4j(把一个负责的多表关系数据库关系等价转化为图数据中,并且查询表现出巨大的优势). The transformation is iterative and deliberate, emphasizing the conceptual shift from relational tables to the nodes and relationships of a graph.

This guide will show you how to:

  1. Load: create data from external CSV files(加载数据)
  2. Index: index nodes based on label
  3. Relate: transform foreign key references into data relationships
  4. Promote: transform join records into relationships

1、找到位置

:play start

弹出如下界面:

northwind

点击中间的“Jump into code”,进入到如下界面:

Northwind

 

这里有Movie Graph和Northwind Graph两个案例,这里演示第二个案例。

2、 Load: create data from external products CSV files

LOAD CSV WITH HEADERS FROM "http://data.neo4j.com/northwind/products.csv" AS row
CREATE (n:Product)
SET n = row,
n.unitPrice = toFloat(row.unitPrice),
n.unitsInStock = toInteger(row.unitsInStock), n.unitsOnOrder = toInteger(row.unitsOnOrder),
n.reorderLevel = toInteger(row.reorderLevel), n.discontinued = (row.discontinued <> "0")-------------------------------------------------------------------------
1、LOAD CSV WITH HEADERS FROM "http://data.neo4j.com/northwind/products.csv" AS row return row,这个row到底是什么呢?
{"reorderLevel": "10","unitsInStock": "39","unitPrice": "18.00","supplierID": "1","productID": "1","discontinued": "0","quantityPerUnit": "10 boxes x 20 bags","categoryID": "1","unitsOnOrder": "0","productName": "Chai"
}
{"reorderLevel": "25","unitsInStock": "17","unitPrice": "19.00","supplierID": "1","productID": "2","discontinued": "0","quantityPerUnit": "24 - 12 oz bottles","categoryID": "1","unitsOnOrder": "40","productName": "Chang"
}
.....(后面还有)
2、SET n = row 是建立了77 labels,对应到关系数据库就是用上面的属性结构和数据建立了77条纪律;
3、n.unitPrice = toFloat(row.unitPrice), 有些属性要用Neo4j的字段类型进行强制说明,以免出错;

3、 Load: create data from external categories CSV files

LOAD CSV WITH HEADERS FROM "http://data.neo4j.com/northwind/categories.csv" AS row
CREATE (n:Category)
SET n = row

4、 Load: create data from external suppliers CSV files

LOAD CSV WITH HEADERS FROM "http://data.neo4j.com/northwind/suppliers.csv" AS row
CREATE (n:Supplier)
SET n = row

5、Create indexes

# 以下三个分开执行
CREATE INDEX ON :Product(productID)
CREATE INDEX ON :Category(categoryID)
CREATE INDEX ON :Supplier(supplierID)

6、Create data relationships

# Product和Category建立PART_OF关系,一个Category可以有多个Product,
# 这个是很自然的隶属关系(PART_OF),注意where的这种查询方式
MATCH (p:Product),(c:Category)
WHERE p.categoryID = c.categoryID
CREATE (p)-[:PART_OF]->(c)# 查询所建立的PART_OF关系
MATCH p=()-[r:PART_OF]->() RETURN p LIMIT 80000

形成的图关系如下所示,里面显示的数量可以简单分析一下,所有的Product(77)都找到了隶属的类,一共隶属8个Category(8),所以下图中共有8组图,共有77+8=85(nodes)。

查询PART_OF关系
# 建立Products和Supplier之间的关系
MATCH (p:Product),(s:Supplier)
WHERE p.supplierID = s.supplierID
CREATE (s)-[:SUPPLIES]->(p)# 查询关系如下图
MATCH p=()-[r:SUPPLIES]->() RETURN p LIMIT 2555
查询SUPPLIES关系

7、Query using patterns

# 查询关联上的nodes
MATCH (s:Supplier)-->(:Product)-->(c:Category)
RETURN s.companyName as Company, collect(distinct c.categoryName) as Categories# collect(distinct c.categoryName)是做了去重处理,一个s:Supplier可以
# 有很多Product,每一个Product只对应一个c:Category,所有一个s:Supplier
# 的两件不同的Product可能对应相同的c:Category

查询结果如下:

这样的查询时不直观的,既然建立了三种节点之间的两种关系,那么在图谱中是什么样子呢?

# 查询PART_OF和SUPPLIES两种关系的节点
MATCH p=()-[r1:PART_OF]-()-[r2:SUPPLIES]-() RETURN p LIMIT 2500
All Relation

 

# 一个s:Supplier可以对应多个Product
# 一个Product属于一个categoryName
# 查询可以提供Produce类别Product的s:Supplier,返回结果去重
MATCH (c:Category {categoryName:"Produce"})<--(:Product)<--(s:Supplier)
RETURN DISTINCT s.companyName as ProduceSuppliers

8、 Load: create data from external Customer、Orders CSV files

LOAD CSV WITH HEADERS FROM "http://data.neo4j.com/northwind/customers.csv" AS row
CREATE (n:Customer)
SET n = rowLOAD CSV WITH HEADERS FROM "http://data.neo4j.com/northwind/orders.csv" AS row
CREATE (n:Order)
SET n = rowCREATE INDEX ON :Customer(customerID)CREATE INDEX ON :Order(orderID)

9、Create data relationships

MATCH (c:Customer),(o:Order)
WHERE c.customerID = o.customerID
CREATE (c)-[:PURCHASED]->(o)MATCH p=()-[r:PURCHASED]->() RETURN p LIMIT 25
查询PURCHASED关系

 

10、 Load: create data from external order-details CSV files

# 到这一步实体对象就多了,之前有:
# Sublier-[:SUBLIES]->Product-[:PART_OF]->Category
# Customer-[:PURCHASED]->Order
# 上面两种图之间是不联通的,下面还要建立Order-[details:ORDERS]->p:Product)
# 这样所有的实体都联通了,注意多次执行不会覆盖,会建立重名ORDERS关系,本质上是两个系统id
LOAD CSV WITH HEADERS FROM "http://data.neo4j.com/northwind/order-details.csv" AS row
MATCH (p:Product), (o:Order)
WHERE p.productID = row.productID AND o.orderID = row.orderID
CREATE (o)-[details:ORDERS]->(p)
SET details = row,
details.quantity = toInteger(row.quantity)

11、Query using patterns

# 图数据库的匹配是一种结构匹配,而不是属性值匹配
# 譬如(cust:Customer)-[:PURCHASED]->(:Order)-[o:ORDERS]->(p:Product)-
# [:PART_OF]->(c:Category {categoryName:"Produce"})就是一种结构
# 下面的意思是说:找到买Produce类的Customer的名字,并且计算该用户订单上
# 所有Product价格的总和,这在电商中是非常有意义的
# 和关系数据库相比,这就体现了图数据库多个表链接查询的重大优势
MATCH (cust:Customer)-[:PURCHASED]->(:Order)-[o:ORDERS]->(p:Product)-[:PART_OF]->(c:Category {categoryName:"Produce"})
RETURN DISTINCT cust.contactName as CustomerName, SUM(o.quantity) AS TotalProductsPurchased# 官网给出的是如下的方式,和上面等价的
MATCH (cust:Customer)-[:PURCHASED]->(:Order)-[o:ORDERS]->(p:Product),(p)-[:PART_OF]->(c:Category {categoryName:"Produce"})
RETURN DISTINCT cust.contactName as CustomerName, SUM(o.quantity) AS TotalProductsPurchased

12、我们的图谱长什么样子呢?

图谱结构
# 图关系要拆分成具有线性关系的r1,r2,链接起立展示
MATCH r1=(cust:Customer)-[:PURCHASED]->(:Order)-[o:ORDERS]->(p:Product),r2=(sup:Supplier)-[:SUPPLIES]-(p)-[:PART_OF]->(c:Category {categoryName:"Produce"})
RETURN r1, r2 limit 1
图谱展示

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RDIFramework.NET 中多表关联查询分页实例

RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET&#xff0c;基于.NET的快速信息化系统开发、整合框架&#xff0c;给用户和开发者最佳的.Net框架部署方案。该框架以SOA范式作为指导思想&#xff0c;作为异质系统整合与互操…

(六)Neo4j综合项目

0、概述 本文以热播电视剧《人民的名义》中的人物关系为数据基础&#xff0c;抛开案例本身的内容&#xff0c;本项目的意义在于指出使用Neo4j数据库的一般流程是什么&#xff1f;包括数据的导入、操作、查询、展示&#xff0c;从而体会出与传统数据库相比Neo4j在处理图数据的巨…

过滤器filter,监听器listener

目录1. filter过滤器1.1 原理1.2 配置1.3 过滤掉脏话demo2. listener监听器2.1 作用2.2 ServletContextListener demo1. filter过滤器 作用:过滤servlet&#xff0c;jsp&#xff0c;js&#xff0c;css&#xff0c;图片对象&#xff0c;以及一切在服务器&#xff0c;客户端想访…

(一)elasticsearch6.1.1安装详细过程

1、配置java环境 检查java环境 满足elasticsearch6.1.1java环境要求&#xff1b; 2、安装ElasticSearch6.1.1 ①为es新生成用户、用户组 su root groupadd esgroup useradd ela -g esgroup -p 5tgbhu8[rootlocalhost fibonacci]# su ela Attempting to create directory /h…

使用jdk DOM,SAX和第三方jar包DOM4J创建,解析xml文件

xml的创建&#xff0c;解析1. 什么是xml文件1.1 什么是xml文件1.2 解析xml的方式&#xff0c;优缺点2. 使用dom操作xml文件2.1 使用dom创建xml文件2.2 使用dom解析xml文件2.3 使用dom对xml文件增删改3. 使用SAX解析xml文件4. 使用DOM4J操作xml文件4.1 使用DOM4J创建xml文件4.2 …

(二)ElasticSearch6.1.1 Python API

0、准备开启数据库 ① 关闭Linux防火墙&#xff0c;这个很重要&#xff0c;否则API总是报错连不上。 # 查看防火墙状态 firewall-cmd --state# 关闭防护墙 systemctl stop firewalld.service# 开启防火墙 systemctl start firewalld.service# 重启防火墙 systemctl restart f…

sqlite3数据库使用

SQLite简介 SQLite是一个软件库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎&#xff0c;这是在普及方面的增长&#xff0c;与它的尺寸大小无关。SQLite 源代码不受版权限制。 什么是sqlite SQLite是一…

(三)ElasticSearch的基本概念

0、面向文档 应用中的对象很少只是简单的键值列表&#xff0c;更多时候它拥有复杂的数据结构&#xff0c;比如包含日期、地理位置、另一个对象或者数组。 总有一天你会想到把这些对象存储到数据库中。将这些数据保存到由行和列组成的关系数据库中&#xff0c;就好像是把一个丰…

ajax下拉框省市级联动

目录效果sql数据前后台代码实现效果 初始访问页面 选中省会&#xff0c;自动刷新页面 sql数据 -- 省市联动数据CREATE TABLE PROVINCE (PID NUMBER PRIMARY KEY,PNAME VARCHAR(20) NOT NULL )SELECT * FROM PROVINCEINSERT INTO province VALUES (1, 北京市); INSERT I…

python的with关键字

with语句适用于对资源进行访问的场合&#xff0c;确保不管使用过程中是否发生异常都会执行必要的“清理”操作&#xff0c;释放资源&#xff0c;比如文件使用后自动关闭、线程中锁的自动获取和释放等。with表达式其实是try-finally的简写形式。但是又不是全相同。 ""…

pgm2

MRF 笔记 我们先讨论引入 MRF 的必要性。经典的例子就是四个 r.v.s 连成一个正方形的结构的时候&#xff0c;我们没法通过 BN 获得给定对角线两个 r.v.s 而剩下的条件独立&#xff08;不都是 d-sep&#xff09;&#xff0c;反过来如果希望通过 MRF 刻画某些 BN 也是不可行的&am…

(六)ElasticSearch 6.1.1聚合查询

1 普通类型 1.1 基本操作 1.1.1 导入实战数据 数据字段如下&#xff1a; 字段类型作用pricelong汽车售价colortext汽车颜色maketext汽车品牌solddate销售日期 # 创建索引 PUT /cars {"mappings" : {"transactions" : {"properties" : {"…

12 Essential Bootstrap Tools for Web Designers

12 Essential Bootstrap Tools for Web Designers Posted by vikas on June 6, 2014, filed in: Tools, Web Design 原文地址&#xff1a;http://designzum.com/2014/06/06/12-best-bootstrap-tools-for-web-designers/Bootstrap is a great front end website development pla…

Sublime Text3自定义快捷键

转载于:https://www.cnblogs.com/shimily/articles/3783711.html

打jar包和执行jar包

使用eclipse打jar包 默认生成的目录在/Work/Projects/eclipse-workspace 执行 java -cp hellotest.jar com.feiyangedu.sample.Main java -cp testtesttest.jar com.feiyangedu.sample.Person out&#xff1a;print person java -cp testtesttest.jar com.feiyangedu.sample.…