мы пытаемся использовать API Traversal для получения для заданного набора узлов компании только узлы компании, которые предоставляют все продукты, которые содержатся в списке узлов продуктов. Предварительные попытки использования Cypher не работали хорошо. В этом примере:Ограничение API-интерфейса Neo4j?
Company 1 provides product A and B
Company 2 provides product A and B and C
Company 3 provides product A and C
Если все 3 компании включены в компании список запроса и продукта А и С находятся в списке продуктов в запросе, мы хотели бы вернуть только компания 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)
, мы не получим ни одного узла компании, если в списке узлов продукта имеется более одного продукта.
Любые предложения оценены.
Вы можете добавить исходный запрос cypher? Это облегчит понимание того, чего вы хотите достичь. –
Michael - вот оригинальный запрос Cypher, который у нас был - мы хотим только вернуть компании, которые предоставляют все продукты в списке, и этот синтаксис не работал: START company = node (10719,37496,37417,37464), product = node (37512) , 65094) WHERE компания -> продукт RETURN компания, продукт; Спасибо –