2016-03-08 62 views
0

我有一個Neo4j數據庫,包含字典中的單詞。如果使用不在字典中的單詞進行查詢(例如拼寫錯誤的單詞),我希望查詢只返回缺少的單詞。查找從Neo4j數據庫中找不到的單詞

我可以做相反的事情。該查詢返回從數據庫中的單詞拼寫正確:

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

我可以寫一個查詢,將返回類似[「twoo」,「mispleled」]?或者我必須使用類似上面的查詢,並檢查應用程序本身哪些詞沒有匹配?

回答

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]; 

有關創建索引仍然適用的建議。

0

[編輯]

這可能適合你。 {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)創建索引:

CREATE INDEX ON :Word(spelling); 
+0

這對我不起作用。它返回所有的輸入單詞,不管它們是否存在。然而,查詢UNWIND [「one」,「ivnvalid」,「word」] AS in_word 可選匹配(w:Word {拼寫:in_word}) RETURN w'只返回拼寫錯誤的單詞。 –

+0

對不起,解決了我的答案。 – cybersam