求助:Neo4j大小写不敏感查询及单双引号转义实现方法
Neo4j大小写不敏感查询与引号转义处理
一、大小写不敏感查询实现
1. 字符串函数统一转换大小写
将属性值与查询条件统一转为小写(或大写),实现匹配:
// 精确匹配 MATCH (u:User) WHERE lower(u.name) = lower('Mary') RETURN u // 模糊包含匹配 MATCH (u:User) WHERE lower(u.name) CONTAINS lower('mar') RETURN u
2. 创建大小写不敏感索引(Neo4j 4.0+)
创建索引时指定caseInsensitive参数,后续查询无需手动转换:
// 创建大小写不敏感索引 CREATE INDEX user_name_case_insensitive FOR (u:User) ON (u.name) OPTIONS {caseInsensitive: true} // 直接查询,自动匹配任意大小写 MATCH (u:User) WHERE u.name = 'Mary' RETURN u
3. 全文索引匹配
全文索引默认支持大小写不敏感,适合模糊查询场景:
// 创建全文索引 CREATE FULLTEXT INDEX user_names FOR (u:User) ON EACH [u.name] // 执行查询 CALL db.index.fulltext.queryNodes('user_names', 'mary') YIELD node, score RETURN node
二、单引号与双引号的转义处理
1. 单引号转义
当字符串用单引号包裹时,将内容中的单引号重复两次即可转义(如处理mary's):
MATCH (u:User) WHERE u.name = 'mary''s' RETURN u
2. 双引号转义
若用双引号包裹字符串,内容中的双引号可通过重复两次转义:
MATCH (u:User) WHERE u.name = "mary""s" RETURN u
3. 参数化查询(推荐)
通过参数传递变量,无需手动转义,同时避免注入风险:
// Cypher脚本中使用参数 :param name => "mary's" MATCH (u:User) WHERE u.name = $name RETURN u
以Python驱动为例:
from neo4j import GraphDatabase driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "password")) with driver.session() as session: result = session.run( "MATCH (u:User) WHERE u.name = $name RETURN u", name="mary's" ) for record in result: print(record)
内容的提问来源于stack exchange,提问作者Fabricio Silva
相关产品推荐
相关产品推荐

