Cypher笔记(一)

这篇博客介绍了Neo4j的Cypher查询语言,包括运算符、语句如MATCH、WHERE、AGGREGATION,以及LOAD CSV、MERGE等操作。此外,还详细讲解了函数的使用,如COUNT、AVG,以及字符串匹配和数据导入导出。Cypher在处理图形数据库时提供了一种强大的查询和操作工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cypher笔记(一)

更详细的内容请阅读《neo4j权威指南》

运算符

  • 数学运算符:+、-、*、/、%、^
  • 比较运算符:=、<>、<、>、<=、>=、IS NULL、IS NOT NULL
  • 布尔运算符:AND、OR、XOR、NOT
  • 字符串运算符:+、=~
  • 列表运算符:+、IN

语句

  • 读语句:MATCH、OPTIONAL MATCH、WHERE、START、Aggregation、LOAD CSV
  • 写语句:CREATE、MERGE、SET、DELETE、REMOVE、FOREACH、CREATE UNIQUE
  • 通用语句:RETURN、ORDER BY、LIMIT、SKIP、WITH、UNWIND、UNION、CALL
  • 字符串匹配:STARTS WITH、ENDS WITH、CONTAINS
MATCH

MATCH是模式描述的一部分,匹配的时候就会考虑到WHERE语句中的断言,而不是匹配之后。

OPTIONAL MATCH

用于搜索模式中描述的匹配项,对于找不到的项用null代替。

WHERE

在WITH和START中用于过滤结果,在MATCH和OPTIONAL MATCH中为模式增加约束,而不能看作匹配完成后的结果过滤

START

通过遗留索引查找开始点

START n = node:Pig(name = 'A') RETURN n
START n = node:Pig('name:A') RETURN n
START r = relationship:Own(name = 'Andres') RETURN r
Aggregation
  • count:count(*)用于计算匹配的行数,count(<expression>)用于计算<expression>中的非空值的数量
  • sum:计算所有值之和,空值会被丢弃
  • avg:计算数值列平均值
  • percentileDisc:计算给定值在一个组中的百分位,取值0.0到1.0。它使用舍入法返回最接近百分位的值
  • percentileCont:计算给定值在一个组中的百分位,取值0.0到1.0。采用线性插值的方法,在两个值之间计算一个加权平均数
  • stdev:计算给定值在一个组中的标准偏差,采用标准的two-pass方法,以N-1作为分母,当以部分样本作为无偏估计时应使用stdev;当计算整个样本的标准偏差时应使用stdevp
  • stdevp:计算给定值在一个组中的标准偏差
  • max
  • min
  • collect:将所有值收集起来放入一个列表,空值会被忽略
  • distinct:去掉重复值
MATCH (n { name: 'A' })-->(x) RETURN n, count(*) // 返回了开始节点和与之关联的节点数量
LOAD CSV

用于从CSV文件中导入数据

  • CSV文件的URL可以由FROM后面紧跟的任意表达式来指定
  • 需要使用AS来为CSV数据指定一个常量
  • LOAD CSV支持gzip、Deflate和ZIP压缩的资源
  • CSV文件可以存在数据库服务器上,通过file:///URL来访问。LOAD CSV也支持通过HTTPS、HTTP、FTP来访问CSV文件
  • LOAD CSV支持HTTP重定向,但基于安全考虑重定向时不能该表协议类型,比如冲HTTPS到HTTP
MERGE

确保图数据库中存在某个特定的模式,如果不存在就创建它,如果存在则合并属性(逻辑或)

MATCH (person:Person) MERGE (city:City { name: person.bornIn }) RETURN city
MERGE (keanu:Person { name: 'Keanu Reeves' })
ON CREATE SET keanu.created = timestamp()
RETURN keanu.name, keanu.created
MERGE (person:Person)
ON MATCH SET person.found  = True
RETURN person.name, person.found
MERGE (keanu:Person { name: 'Keanu Reeves' })
ON CREATE SET keanu.created = timestamp()
ON MATCH SET keanu.lastSeen = timestamp(), keanu.found = True
RETURN keanu.name, keanu.created, keanu.lastSeen
// 如果节点不存在则设置created属性,否则设置lastSeen和found属性
CREATE CONSTRAINT ON (n:Person) ASSERT n.name IS UNIQUE
CREATE CONSTRAINT ON (n:Person) ASSERT n.role IS UNIQUE
MERGE (michael:Person{ name: 'Michael Douglas', role: 'Grodon Gekko' }) RETURN michael
SET

用于更新节点的标签以及节点和关系的属性

MATCH (n { name: 'Andres' }) SET n.name = NULL RETURN n // 删除节点属性
MATCH (at { name: 'Andres' }), (pn { name: 'Peter' }) SET at = pn RETURN at, pn // 复制属性

                
<think>好的,用户需要查找吴恩达关于RAG课程的笔记总结。首先,我得回忆下之前提供的引用内容,特别是引用[3]提到的“Knowledge Graphs for RAG -- Query Knowledge Graphs”,这可能就是用户需要的课程笔记。用户之前的问题和我的回答中,已经涉及了RAG与知识图谱的结合应用,所以需要确认这些内容是否符合用户的需求。 接下来,需要检查是否有其他相关的引用。引用[1]提到了微调大模型,包括指令微调,而引用[2]和引用[3]都涉及知识图谱在RAG中的应用,尤其是Cypher查询和模式检查。用户明确提到的是RAG课程笔记,因此引用[3]中的内容应该是最相关的。 然后,我应该整理这些信息,分点总结课程的核心内容,比如RAG的基本原理、知识图谱的作用、技术实现步骤以及实际应用案例。同时,需要确保使用正确的中文表达,并遵循格式要求,比如行内数学公式用$...$,独立公式单独成段。此外,生成的相关问题需要与RAG和知识图谱相关,帮助用户进步探索。 还要注意用户可能需要的细节,比如技术实现中的具体步骤或评估方法,所以在总结时要涵盖这些方面。最后,检查引用是否正确标注,确保每个引用段落末尾有对应的标识符,如[^3]。</think>根据吴恩达RAG课程相关内容,我为您整理以下核心知识点总结: ### 、RAG基础架构 1. **核心公式**:$$ P(answer|query) = \sum_{doc}P(retrieve(doc)|query) \cdot P(generate(answer)|doc,query) $$ 通过检索增强生成提升大模型事实准确性[^3] 2. **关键组件**: - 检索器:基于向量相似度匹配文档 - 生成器:大语言模型生成最终回答 - 知识图谱:用于结构化知识存储与推理 ### 二、知识图谱集成方案 1. **Cypher查询实现**: ```python # 查询知识图谱中的节点总数 cypher = """ MATCH (n) RETURN count(n) """ kg.query(cypher)[^3] ``` 2. **模式检查机制**: ```python kg.refresh_schema() print(textwrap.fill(kg.schema, 60)) # 结构化展示图谱模式[^2] ``` ### 三、技术实现步骤 1. **数据准备阶段**: - 实体识别与关系抽取 - 构建三元组存储:$(head, relation, tail)$ - 生成向量索引 2. **混合检索策略**: - 向量检索:$cos\_similarity(query\_vec, doc\_vec)$ - 图遍历检索:通过Cypher实现多跳查询 ### 四、评估与优化 1. **评估指标**: - 检索召回率:$Recall@k = \frac{相关文档数}{总相关文档数}$ - 生成准确性:人工评估与自动指标结合 2. **典型应用场景**: - 金融领域风险分析 - 医疗知识问答系统 - 法律条款检索
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值