一.節點
1.新建節點
create (n:GroupProduct {name:'都邦高保額團意險',description: "保險產品名稱"} ) return n
CREATE:Neo4j 的關鍵字,用于創建新節點或關系。
(n:GroupProduct):
n 是節點的臨時別名(變量名),方便在return中引用,創建完成之后就沒用了。
GroupProduct 是節點的標簽(Label),用于分類節點(如 Person, Product 等)。
{name:'都邦高保額團意險',description: "保險產品名稱"}
節點的屬性(Properties),鍵值對形式:
RETURN n:
返回新創建的節點 n,用于驗證操作是否成功。
2.已有節點創建關系
MATCH (a:GroupProductA {name:'保高空'}), (b:GroupProduct {name:'都邦高保額團意險'})
CREATE (a)-[:INCLUDE {restrict: "涉電及高空作業按6類可承保"}]->(b)
變量名可以隨意定義,只要能區分出來兩個節點的區別,簡短有意義
關系名稱INCLUDE: 也可以隨意定義,最好是能夠見名知意,最好定義統一的團隊規范
關系也可以添加屬性: 比如表明這個關系有什么限制條件
使用箭頭 -> 表示從左到右的關系方向
3.刪除節點
MATCH (n:GroupProductA {name:'保高空' })
DETACH DELETE n
4.查詢節點之間的相鄰節點
MATCH (startNode {屬性名: 值})-[:關系類型*..N]-(relatedNode)
RETURN startNode, relatedNode
例如:
MATCH (a {name: "保高空"})-[*..1]-(b)
RETURN a,b
關鍵參數說明
參數 | 說明 | 示例 |
---|---|---|
* | 表示遍歷任意深度的關系(包括直接關聯和間接關聯)。 | -[*] 表示所有層級關聯。 |
*..N | 最大遍歷深度。例如 *..2 表示遍歷 1 層或 2 層關聯。 | -[:EXCLUDES*..2] 最多找兩跳關聯。 |
-[]-> | 單向遍歷(從左到右)。 | (a)-[:PARENT_OF]->(b) 只找 a 的子節點。 |
<-[]- | 反向遍歷(從右到左)。 | (a)<-[:CHILD_OF]-(b) 找到 b 的父節點。 |
?注意事項
性能問題:遍歷深度(如 *..N)越大,查詢耗時越長,建議根據需求限制深度。
方向性:若關系是單向的(如 EXCLUDES),需注意方向(如 ()-[:EXCLUDES]->())。
屬性唯一性:確保查詢的屬性(如 product_id)是唯一標識符,否則可能返回多個節點。
5.對已創建好的節點添加屬性
MATCH (a:GroupProductA {name:'保高空' })
SET a+= { embedding: [] }
RETURN b;
二.節點向量存儲和檢索
1.節點需要添加向量數組
可以選擇一開添加節點的時候加一個向量屬性
create (n:GroupProductA {name:'保高空',description: "保險產品可以保高空作業",embedding: [向量的具體值]}) return n
或者后續添加
MATCH (a:GroupProductA {name:'保高空' })
SET a+= { embedding: [向量具體數值] }
RETURN b;
2.給節點增加向量索引
CREATE VECTOR INDEX 索引名稱 IF NOT EXISTS
FOR (具體的節點標簽)
ON n.embedding
OPTIONS { indexConfig: {
?`vector.dimensions`: 向量維度數值,
?`vector.similarity_function`: 向量計算方法
}}
例如:
CREATE VECTOR INDEX HighDutyIdx IF NOT EXISTS
FOR (n:HighDuty)
ON n.embedding
OPTIONS { indexConfig: {
?`vector.dimensions`: 1536,
?`vector.similarity_function`: 'cosine'
}}
3.計算向量余弦相似度
MATCH (a:GroupProductA)
WHERE a.embedding IS NOT NULL
WITH n,
???? // 計算向量余弦相似度或歐氏距離
???? vector.similarity.cosine(n.embedding, [0.1, 0.2, ...]) AS similarity
RETURN n.name, similarity
ORDER BY similarity DESC
LIMIT 10;
4.查詢兩個節點的向量相似度
MATCH (a:GroupProductA {name: '保高空'})
MATCH (b:GroupProductA {name:'團意'})
RETURN vector.similarity.cosine(a.embedding, b.embedding)
5.查詢所有向量索引
SHOW VECTOR INDEXES
6.刪除指定向量索引
DROP INDEX moviePlots
三.RAG向量檢索最佳實踐
1.先查詢出所有符合的向量節點,有個閾值,比如大于0.8的查詢出所有符合的節點
2.然后再通過這些符合的節點,根據節點之間的關系,找到想要查詢出來的節點屬性
3.根據查詢出來的節點屬性和用戶問題,給大模型總結