我的數據庫包含酒店,酒店評論,評論和主題中的術語(即單詞)(例如,可能有一個話題「Staff」,其中包含描述酒店員工的術語)作爲節點。所有節點上的索引都存在。關係如下:酒店< - 評論 - >期限 - >主題在neo4j中處理長路徑模式
我目前正試圖找到一種有效的方式來查詢有兩個或多個指定酒店路徑的主題。換句話說,我對兩家酒店的共同話題感興趣。如果酒店A的路徑爲主題1,2,3,酒店B的路徑爲主題2,3,4,則結果應爲2,3。
我嘗試了以下內容,但這看起來非常低效,這很可能是由於酒店和主題之間的可能路徑數量所致。基本上,評論中的每個單詞都可能會創建一個必須檢查的新路徑。
// show all topics that two hotels have in common
MATCH (h2:Hotel)<--(r2:Review)-->(t2:Term)-->(to:Topic)<--(t1:Term)<--(r1:Review)-->(h1:Hotel)
WHERE h1.id IN ["id1","id2"] AND h2.id IN ["id1","id2"] AND NOT h1.id=h2.id
RETURN h1.id,to.topic, count(to) AS topic_mentions
我想知道是否有處理這種更快的方式,如果我要實現這個Java或類似語言的我可能會嘗試做一個BFS開始在每一家酒店,然後走的重疊什麼我發現。我相當肯定,將傳遞邊添加爲直接邊緣酒店 - >主題會加快速度,但是我有限的數據庫設計知識告訴我這可能是不必要的冗餘,而不是一個好習慣?
我試圖在與另一個MATCH和WITH子句進行模式匹配之前做id匹配,但是這沒有加速任何事情;我認爲問題真的在於模式匹配本身。