2016-02-29 51 views
0

在用于语言学习者的数据库中,我拥有标签User的节点和标签为Word的节点。专有名词(如“英文”)的字词以大写首字母存储;其他词(如“an”)全部以小写形式存储。对词汇集合进行不区分大小写匹配的Cypher查询

我想创建一个包含用户和句子的查询,并在用户和句子中的单词之间的数据库中创建关系。但是,单词匹配必须是不区分大小写的,以便在句子的开头解释大写字母。

我试图对这一主题的许多变化,都没有成功:

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查询?

回答

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; 
+0

我会建议只是将所有内容都以小写形式存储。你为什么要存储相同的数据2次 – Mvde

+1

这是不一样的。我认为他希望能够在结果中显示“英语”,但小写属性可以帮助他匹配“英语”或“英语”。 –