Nous essayons d'utiliser l'API Traversal pour récupérer, pour un ensemble donné de nœuds d'entreprise, uniquement les nœuds d'entreprise qui fournissent tous les produits contenus dans la liste des nœuds du produit. Les tentatives précédentes d'utiliser Cypher ne fonctionnaient pas bien. Dans cet exemple:Neo4j Traversal API limitation?
Company 1 provides product A and B
Company 2 provides product A and B and C
Company 3 provides product A and C
Si les 3 sociétés sont incluses dans la requête de la liste des entreprises et des produits A et C sont dans la liste des produits en question, nous voulons retourné seulement Company 2 et 3, car ils fournissent le produit A et C . Voici notre requête:
for (Path position : Traversal.description()
.depthFirst()
.uniqueness(Uniqueness.NODE_GLOBAL)
.relationships(Rels.PROVIDES_PRODUCT, Direction.OUTGOING)
.evaluator((Evaluator) Evaluators.includeWhereEndNodeIs(productNodes))
.traverse(companyNodes))
Si nous utilisons le Evaluator.includeWhereEndNodeIs(productNodes)
nous récupérons toutes les entreprises qui fournissent un des produits dans la liste productNodes
(toutes les 3 entreprises dans l'exemple ci-dessus). Si nous utilisons l'évaluateur Evaluators.includeIfContainsAll(productNodes)
, nous ne récupérons aucun nœud de société s'il y a plusieurs produits dans la liste des nœuds de produit.
Toute suggestion appréciée.
pouvez-vous ajouter la requête de chiffrement d'origine? Cela rendrait beaucoup plus facile de comprendre ce que vous voulez accomplir. –
Michael - voici la requête originale de Cypher que nous avions - nous voulons seulement que les entreprises retournées fournissent tous les produits de la liste et que cette syntaxe ne fonctionne pas: START company = node (10719,37496,37417,37464), product = node (37512 , 65094) O WH société -> produit RETURN entreprise, produit; Merci –