Hybrid finder results
This commit is contained in:
parent
5e19a37344
commit
76f447ba7d
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace FOQ\ElasticaBundle\Doctrine;
|
namespace FOQ\ElasticaBundle\Doctrine;
|
||||||
|
|
||||||
|
use FOQ\ElasticaBundle\HybridResult;
|
||||||
use FOQ\ElasticaBundle\Transformer\ElasticaToModelTransformerInterface;
|
use FOQ\ElasticaBundle\Transformer\ElasticaToModelTransformerInterface;
|
||||||
use Elastica_Document;
|
use Elastica_Document;
|
||||||
|
|
||||||
|
@ -85,6 +86,18 @@ abstract class AbstractElasticaToModelTransformer implements ElasticaToModelTran
|
||||||
return $objects;
|
return $objects;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function hybridTransform(array $elasticaObjects)
|
||||||
|
{
|
||||||
|
$objects = $this->transform($elasticaObjects);
|
||||||
|
|
||||||
|
$result = array();
|
||||||
|
for ($i = 0; $i < count($elasticaObjects); $i++) {
|
||||||
|
$result[] = new HybridResult($elasticaObjects[$i], $objects[$i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetches objects by theses identifier values
|
* Fetches objects by theses identifier values
|
||||||
*
|
*
|
||||||
|
|
|
@ -32,6 +32,20 @@ class TransformedFinder implements FinderInterface, PaginatedFinderInterface
|
||||||
* @return array of model objects
|
* @return array of model objects
|
||||||
**/
|
**/
|
||||||
public function find($query, $limit = null)
|
public function find($query, $limit = null)
|
||||||
|
{
|
||||||
|
$results = $this->search($query, $limit);
|
||||||
|
|
||||||
|
return $this->transformer->transform($results);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function findHybrid($query, $limit = null)
|
||||||
|
{
|
||||||
|
$results = $this->search($query, $limit);
|
||||||
|
|
||||||
|
return $this->transformer->hybridTransform($results);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function search($query, $limit = null)
|
||||||
{
|
{
|
||||||
$queryObject = Elastica_Query::create($query);
|
$queryObject = Elastica_Query::create($query);
|
||||||
if (null !== $limit) {
|
if (null !== $limit) {
|
||||||
|
@ -39,9 +53,10 @@ class TransformedFinder implements FinderInterface, PaginatedFinderInterface
|
||||||
}
|
}
|
||||||
$results = $this->searchable->search($queryObject)->getResults();
|
$results = $this->searchable->search($queryObject)->getResults();
|
||||||
|
|
||||||
return $this->transformer->transform($results);
|
return $results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a paginator wrapping the result of a search
|
* Gets a paginator wrapping the result of a search
|
||||||
*
|
*
|
||||||
|
|
27
HybridResult.php
Normal file
27
HybridResult.php
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace FOQ\ElasticaBundle;
|
||||||
|
|
||||||
|
use Elastica_Result;
|
||||||
|
|
||||||
|
class HybridResult
|
||||||
|
{
|
||||||
|
protected $result;
|
||||||
|
protected $transformed;
|
||||||
|
|
||||||
|
public function __construct(Elastica_Result $result, $transformed = null)
|
||||||
|
{
|
||||||
|
$this->result = $result;
|
||||||
|
$this->transformed = $transformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTransformed()
|
||||||
|
{
|
||||||
|
return $this->transformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getResult()
|
||||||
|
{
|
||||||
|
return $this->result;
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
namespace FOQ\ElasticaBundle\Transformer;
|
namespace FOQ\ElasticaBundle\Transformer;
|
||||||
|
|
||||||
|
use FOQ\ElasticaBundle\HybridResult;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds a collection of transformers for an index wide transformation.
|
* Holds a collection of transformers for an index wide transformation.
|
||||||
*
|
*
|
||||||
|
@ -56,6 +58,18 @@ class ElasticaToModelTransformerCollection implements ElasticaToModelTransformer
|
||||||
return $transformed;
|
return $transformed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function hybridTransform(array $elasticaObjects)
|
||||||
|
{
|
||||||
|
$objects = $this->transform($elasticaObjects);
|
||||||
|
|
||||||
|
$result = array();
|
||||||
|
for ($i = 0; $i < count($elasticaObjects); $i++) {
|
||||||
|
$result[] = new HybridResult($elasticaObjects[$i], $objects[$i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
protected function getTypeToClassMap()
|
protected function getTypeToClassMap()
|
||||||
{
|
{
|
||||||
return array_map(function ($transformer) {
|
return array_map(function ($transformer) {
|
||||||
|
|
|
@ -16,6 +16,8 @@ interface ElasticaToModelTransformerInterface
|
||||||
**/
|
**/
|
||||||
function transform(array $elasticaObjects);
|
function transform(array $elasticaObjects);
|
||||||
|
|
||||||
|
function hybridTransform(array $elasticaObjects);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the object class used by the transformer.
|
* Returns the object class used by the transformer.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue