查找Neo4j数据库中遗漏的单词

时间:2016-03-08 21:21:08

标签: neo4j cypher

我有一个Neo4j数据库,其中包含字典中的单词。如果使用不在字典中的单词(例如拼写错误的单词)进行查询,我希望查询只返回缺失的单词。

我可以做相反的事情。此查询返回正确拼写的数据库中的单词:

MATCH (w:Word)
WHERE w.spelling IN ["good","words","plus","twoo","that","are","mispleled"]
RETURN w.spelling AS word

我可以编写一个返回类似[" twoo","误解"]的查询?或者我是否必须使用上述查询,并在应用程序本身检查哪些单词尚未匹配?

2 个答案:

答案 0 :(得分:2)

您可以在不OPTIONAL MATCH的情况下执行此操作:

WITH ["good", "words", "plus", "twoo", "that", "are", "mispleled"] AS words
MATCH (word:Word) WHERE word.spelling IN words
WITH words, COLLECT(word.spelling) AS matched
RETURN [x IN words WHERE NOT x IN matched];

关于创建索引的建议仍然适用。

答案 1 :(得分:0)

[EDITED]

这可能适合你。 #navigation ul { display: none; list-style: none; margin-left: 0; padding-left: 0; margin-bottom: 0; margin-top: 20px; z-index: 2; } #navigation ul.expanded { display: block; z-index: 2; } #navigation li { display: block; width: auto; padding: 0; z-index: 2; } #lang { position: absolute; top: 50px; right: 5px; z-index: 1; } 是一个参数,其中包含您要检查的单词数组。

{input_words}

为提高效率,您应首先在UNWIND {input_words} AS in_word OPTIONAL MATCH (w:Word { spelling: in_word }) RETURN REDUCE(s = [], x IN COLLECT({ w: w, in_word: in_word }) | CASE WHEN x.w IS NULL THEN s + x.in_word ELSE s END) AS missing_word; 上创建一个索引:

:Word(spelling)