我的数据库包含酒店,酒店评论,评论和主题中的术语(即单词)(例如,可能有一个话题“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匹配,但是这没有加速任何事情;我认为问题真的在于模式匹配本身。