Traversal API を使用して、特定の一連の企業ノードについて、製品ノード リストに含まれるすべての製品を提供する企業ノードのみを取得しようとしています。Cypher を使用する以前の試みはうまく機能しませんでした。この例では:
Company 1 provides product A and B
Company 2 provides product A and B and C
Company 3 provides product A and C
3 つの会社すべてが会社リスト クエリに含まれており、製品 A と C がクエリの製品リストに含まれている場合、製品 A と C を提供しているため、会社 2 と 3 のみを返す必要があります。クエリは次のとおりです。
for ( Path position : Traversal.description()
.depthFirst()
.uniqueness(Uniqueness.NODE_GLOBAL)
.relationships(Rels.PROVIDES_PRODUCT, Direction.OUTGOING)
.evaluator((Evaluator) Evaluators.includeWhereEndNodeIs(productNodes))
.traverse(companyNodes))
を使用すると、リストEvaluator.includeWhereEndNodeIs(productNodes)
内のいずれかの製品を提供するすべての会社が返されproductNodes
ます (上記の例では 3 つの会社すべて)。エバリュエーターを使用する場合Evaluators.includeIfContainsAll(productNodes)
、製品ノード リストに複数の製品がある場合、企業ノードは返されません。
任意の提案をいただければ幸いです。