增删改查

1. 创建(Create)

创建节点

CREATE (n:Label {name: 'Node1', age: 25})
  • n 是节点的变量名,用于后续引用。
  • Label 是节点的标签,用于分类。
  • {name: 'Node1', age: 25} 是节点的属性集合。

创建关系

CREATE (a:Person {name: 'Alice'})-[:KNOWS]->(b:Person {name: 'Bob'})
  • (a:Person {name: 'Alice'})(b:Person {name: 'Bob'}) 是两个节点。
  • [:KNOWS] 是关系的类型。
  • -[:KNOWS]-> 表示从节点 a 到节点 b 的有向关系。

创建多个节点和关系

CREATE (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'}), (a)-[:KNOWS]->(b)
  • 同时创建多个节点和关系。

2. 查询(Read)

查询所有节点

MATCH (n) RETURN n
  • MATCH (n) 匹配所有节点。
  • RETURN n 返回匹配的节点。

查询特定标签的节点

MATCH (n:Person) RETURN n
  • MATCH (n:Person) 匹配所有标签为 Person 的节点。

查询节点的属性

MATCH (n:Person) RETURN n.name, n.age
  • 返回节点的 nameage 属性。

查询关系

MATCH (a)-[r:KNOWS]->(b) RETURN a, r, b
  • MATCH (a)-[r:KNOWS]->(b) 匹配从节点 a 到节点 bKNOWS 关系。
  • RETURN a, r, b 返回节点 a、关系 r 和节点 b

3. 更新(Update)

更新节点属性

MATCH (n:Person {name: 'Alice'}) SET n.age = 26
  • MATCH (n:Person {name: 'Alice'}) 匹配名为 Alice 的节点。
  • SET n.age = 26 更新节点的 age 属性。

添加或更新属性

MATCH (n:Person {name: 'Alice'}) SET n += {age: 26, gender: 'Female'}
  • SET n += {age: 26, gender: 'Female'} 添加或更新节点的属性。

更新关系属性

MATCH (a)-[r:KNOWS]->(b) SET r.since = 2020
  • MATCH (a)-[r:KNOWS]->(b) 匹配关系。
  • SET r.since = 2020 更新关系的属性。

4. 删除(Delete)

删除节点

MATCH (n:Person {name: 'Alice'}) DELETE n
  • MATCH (n:Person {name: 'Alice'}) 匹配节点。
  • DELETE n 删除节点。

删除关系

MATCH (a)-[r:KNOWS]->(b) DELETE r
  • MATCH (a)-[r:KNOWS]->(b) 匹配关系。
  • DELETE r 删除关系。

删除节点及其关系

MATCH (n:Person {name: 'Alice'}) DETACH DELETE n
  • DETACH DELETE 会删除节点及其所有关系。

5. 其他常用操作

条件查询

MATCH (n:Person) WHERE n.age > 25 RETURN n
  • WHERE 用于添加过滤条件。

聚合查询

MATCH (n:Person) RETURN count(n)
  • count(n) 返回匹配节点的数量。

希望这些内容对你写笔记有所帮助!如果需要更详细的内容或示例,可以随时告诉我。

新增用户

CREATE USER name [IF NOT EXISTS]
  SET [PLAINTEXT | ENCRYPTED] PASSWORD 'password'
  [[SET PASSWORD] CHANGE [NOT] REQUIRED]
  [SET STATUS {ACTIVE | SUSPENDED}]
  [SET HOME DATABASE name]

全文索引

涉及不使用正则方式的文本模糊查询 全文索引

CREATE FULLTEXT INDEX namesAndTeams FOR (n:Employee|Manager) ON EACH [n.name, n.team]
OPTIONS {
  indexConfig: {
    `fulltext.analyzer`: 'cjk',
  }
}

创建索引

// chinese-japanese-korean full text index
CREATE FULLTEXT INDEX representation_cjk FOR (re:Representation_cjk) ON EACH [re.value]
OPTIONS {
indexConfig: {
`fulltext.analyzer`: 'cjk'
}
};
// english full text index
CREATE FULLTEXT INDEX representation_eng FOR (re:Representation_eng) ON EACH [re.value]
OPTIONS {
indexConfig: {
`fulltext.analyzer`: 'english'
}
};
CREATE INDEX code FOR (co:Code) ON (co.value, co.definition_set, co.coding_set);
  • 注意:不同语言要指定不同analyzer以保证最佳index

查询

call db.index.fulltext.queryNodes(index_name,string_to_query,{limit:[Int], skip: [Int], analyzer:[analyzer_name]}) yield node, score
  • 第三个参数option部分
    • limit:数量限制
    • skip:跳过top N
    • analyzer:用指定分析器

效率问题

  1. 用apoc iterate
  2. 减少merge,用create
  3. 能在数据预处理时修正的东西就提前修正,cypher只保留入库功能,尽量不要做条件判断、新的查询等