2016-02-29 55 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

這是不一樣的。我認爲他希望能夠在結果中顯示「英語」,但小寫屬性可以幫助他匹配「英語」或「英語」。 –