在语言学习者的数据库中,我有标签为User
的节点和标签为Word
的节点。专有名词(如“英语”)的单词以大写首字母存储;其他单词(如“an”)全部以小写形式存储。
我想创建一个包含用户和句子的查询,并在用户和句子中的单词之间创建数据库中的关系。但是,单词匹配必须不区分大小写,以便在句子开头处考虑大写字母。
我在这个主题上尝试了很多变化,没有成功:
MATCH (u:User)
WHERE u.id = 1
WITH u
UNWIND SPLIT("An English dictionary", " ") AS word
MATCH (w:WORD)
WHERE w.form =~ word
MERGE (u)-[r:UNDERSTANDS]->(w)
RETURN u,r,w
我应该如何修改Cypher查询?
答案 0 :(得分:1)
我建议同时存储原始文本和小写文本,以便您可以索引属性并有效地搜索它。
首先这样做:
MATCH (w:WORD) SET w.form_lower = LOWER(w.form);
现在在其上创建一个索引。
CREATE INDEX ON :WORD(form_lower);
现在您可以使用索引而不是使用正则表达式。
MATCH (u:User) WHERE u.id = 1
WITH u
UNWIND SPLIT(LOWER("An English dictionary"), " ") AS word
MATCH (w:WORD)
WHERE w.form_lower = word
MERGE (u)-[r:UNDERSTANDS]->(w)
RETURN u, r, w;