GraphAware\Reco4PHP\Executor\PostProcessPhaseExecutor::execute PHP Метод

execute() публичный Метод

public execute ( GraphAware\Common\Type\Node $input, Recommendations $recommendations, GraphAware\Reco4PHP\Engine\RecommendationEngine $recommendationEngine ) : GraphAware\Common\Result\ResultCollection
$input GraphAware\Common\Type\Node
$recommendations GraphAware\Reco4PHP\Result\Recommendations
$recommendationEngine GraphAware\Reco4PHP\Engine\RecommendationEngine
Результат GraphAware\Common\Result\ResultCollection
    public function execute(Node $input, Recommendations $recommendations, RecommendationEngine $recommendationEngine)
    {
        $stack = $this->databaseService->getDriver()->stack('post_process_' . $recommendationEngine->name());
        foreach ($recommendationEngine->getPostProcessors() as $postProcessor) {
            if ($postProcessor instanceof CypherAwarePostProcessor) {
                foreach ($recommendations->getItems() as $recommendation) {
                    $tag = sprintf('post_process_%s_%d', $postProcessor->name(), $recommendation->item()->identity());
                    $statement = $postProcessor->buildQuery($input, $recommendation);
                    $stack->push($statement->text(), $statement->parameters(), $tag);
                }
            } elseif ($postProcessor instanceof RecommendationSetPostProcessor) {
                $statement = $postProcessor->buildQuery($input, $recommendations);
                $stack->push($statement->text(), $statement->parameters(), $postProcessor->name());
            }
        }
        try {
            $results = $this->databaseService->getDriver()->runStack($stack);
            return $results;
        } catch (\Exception $e) {
            throw new \RuntimeException('PostProcess Query Exception - ' . $e->getMessage());
        }
    }

Usage Example

 private function doPostProcess(Node $input, Recommendations $recommendations, RecommendationEngine $engine)
 {
     $recommendations->getContext()->getStatistics()->startPostProcess();
     $postProcessResult = $this->postProcessExecutor->execute($input, $recommendations, $engine);
     foreach ($engine->getPostProcessors() as $postProcessor) {
         $tag = $postProcessor->name();
         $result = $postProcessResult->get($tag);
         $postProcessor->handleResultSet($input, $result, $recommendations);
     }
     $recommendations->getContext()->getStatistics()->stopPostProcess();
 }
PostProcessPhaseExecutor