キーワードを指定すると、キーワード、その参考文献、すべての論文の著者を含むすべての論文を検索したいと思います。私は3つのアプローチを使用して試しました。クエリの結果をユニークなリストに結合する - Neo4j
1つの結果をリストにまとめると、リスト(論文)に重複したエントリが表示されます。
MATCH (k:keyword)-[AREAOF]->(f:fieldOfStudy {fieldName: "fos1"})
WITH k
MATCH (p:paper)-[:CONTAINS]->(k)
WITH p
MATCH (p)-[:REFERENCES]->(r:paper)
WITH p,r
MATCH (c:paper)-[:REFERENCES]->(p)
WITH [c,p,r] as papers
MATCH (a:author)-[:PUBLISHED]->(p:paper)
WHERE p in papers
return a,p
アプローチ2 - +演算子 を使用して、私はthisに似た何かをしようとしたが、私は、型の不一致エラーが発生します。
MATCH (k:keyword)-[AREAOF]->(f:fieldOfStudy {fieldName: "fos1"})
WITH k
MATCH (p:paper)-[:CONTAINS]->(k)
WITH p
MATCH (p)-[:REFERENCES]->(r:paper)
WITH p,r
MATCH (c:paper)-[:REFERENCES]->(p)
RETURN p+r
エラー:
Type mismatch: expected List<Node> but was Node (line 8, column 14 (offset: 229))
" return p+r"
^
アプローチ3 - 各結果は、紙との間の接続を表す示すので、最初のアプローチが失敗したUNION
を使用。私はc - [:REFERENCES] - > p - [:REFERENCES] - > rです。 1次元の結果を得るために、私はUNIONを使用しようとしました。これは動作し、論文の一意のリストを取得しますが、出力を使用して著者の質問をすることはできません。
MATCH (k:keyword)-[AREAOF]->(f:fieldOfStudy {fieldName: "fos1"})
WITH k
MATCH (p:paper)-[:CONTAINS]->(k)
RETURN p as papers
UNION
MATCH (k:keyword)-[AREAOF]->(f:fieldOfStudy {fieldName: "fos1"})
WITH k
MATCH (p:paper)-[:CONTAINS]->(k)
WITH p
MATCH (p)-[:REFERENCES]->(r:paper)
RETURN r as papers
UNION
MATCH (k:keyword)-[AREAOF]->(f:fieldOfStudy {fieldName: "fos1"})
WITH k
MATCH (p:paper)-[:CONTAINS]->(k)
WITH p
MATCH (c:paper)-[:REFERENCES]->(p)
RETURN c as papers
この場合、どのように最終回答(論文)を受け取り、著者を見つけることができますか?すなわち
(a:author)-[:PUBLISHED]->(p:paper)
WHERE p in papers
'p + [r]'でアプローチ2を試してください –
あなたはそうです、それはうまくいきます。しかし、アプローチ1と同様に、出力はpとrのペアを持つ2次元配列になります。出力をすべての論文の単一のリストにすることを希望します – ganninu93