データベースにはホテル、ホテルのクチコミ、クチコミやトピックの用語(言葉)が含まれています(例:ホテルスタッフを説明する用語を含む「スタッフ」という話題があります)。すべてのノードのインデックスが存在します。次のような関係:< - レビュー - >用語 - >トピックneo4jのロングパスパターンの処理
現在、2つ以上の指定されたホテルへのパスを持つトピックを効率よく検索する方法を探しています。言い換えれば、私は2つのホテルの共通の話題に興味があります。ホテル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のマッチングを試みましたが、これは何もスピードアップしませんでした。私は問題が本当にパターンマッチングにあると思う。