Cypher查询,对单词集

时间:2016-02-29 21:21:22

标签: neo4j cypher case-insensitive

在语言学习者的数据库中,我有标签为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查询?

1 个答案:

答案 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;