Merge pull request #462 from oohnoitz/master

added support for setting search options
This commit is contained in:
Tim Nagel 2014-02-19 13:40:03 +11:00
commit 13e81fd7bb
11 changed files with 48 additions and 30 deletions

View file

@ -27,7 +27,7 @@ class Client extends ElasticaClient
'transport' => $connection->getTransport(),
);
$this->_logger->logQuery($path, $method, $data, $time, $connection_array);
$this->_logger->logQuery($path, $method, $data, $time, $connection_array, $query);
}
return $response;

View file

@ -9,7 +9,8 @@ interface FinderInterface
*
* @param mixed $query Can be a string, an array or an \Elastica\Query object
* @param int $limit How many results to get
* @param array $options
* @return array results
*/
function find($query, $limit = null);
function find($query, $limit = null, $options = array());
}

View file

@ -12,15 +12,17 @@ interface PaginatedFinderInterface extends FinderInterface
* Searches for query results and returns them wrapped in a paginator
*
* @param mixed $query Can be a string, an array or an \Elastica\Query object
* @param array $options
* @return Pagerfanta paginated results
*/
function findPaginated($query);
function findPaginated($query, $options = array());
/**
* Creates a paginator adapter for this query
*
* @param mixed $query
* @param array $options
* @return PaginatorAdapterInterface
*/
function createPaginatorAdapter($query);
function createPaginatorAdapter($query, $options = array());
}

View file

@ -29,18 +29,19 @@ class TransformedFinder implements PaginatedFinderInterface
*
* @param string $query
* @param integer $limit
* @param array $options
* @return array of model objects
**/
public function find($query, $limit = null)
public function find($query, $limit = null, $options = array())
{
$results = $this->search($query, $limit);
$results = $this->search($query, $limit, $options);
return $this->transformer->transform($results);
}
public function findHybrid($query, $limit = null)
public function findHybrid($query, $limit = null, $options = array())
{
$results = $this->search($query, $limit);
$results = $this->search($query, $limit, $options);
return $this->transformer->hybridTransform($results);
}
@ -64,15 +65,16 @@ class TransformedFinder implements PaginatedFinderInterface
/**
* @param $query
* @param null|int $limit
* @param array $options
* @return array
*/
protected function search($query, $limit = null)
protected function search($query, $limit = null, $options = array())
{
$queryObject = Query::create($query);
if (null !== $limit) {
$queryObject->setSize($limit);
}
$results = $this->searchable->search($queryObject)->getResults();
$results = $this->searchable->search($queryObject, $options)->getResults();
return $results;
}
@ -81,12 +83,13 @@ class TransformedFinder implements PaginatedFinderInterface
* Gets a paginator wrapping the result of a search
*
* @param string $query
* @param array $options
* @return Pagerfanta
*/
public function findPaginated($query)
public function findPaginated($query, $options = array())
{
$queryObject = Query::create($query);
$paginatorAdapter = $this->createPaginatorAdapter($queryObject);
$paginatorAdapter = $this->createPaginatorAdapter($queryObject, $options);
return new Pagerfanta(new FantaPaginatorAdapter($paginatorAdapter));
}
@ -94,10 +97,10 @@ class TransformedFinder implements PaginatedFinderInterface
/**
* {@inheritdoc}
*/
public function createPaginatorAdapter($query)
public function createPaginatorAdapter($query, $options = array())
{
$query = Query::create($query);
return new TransformedPaginatorAdapter($this->searchable, $query, $this->transformer);
return new TransformedPaginatorAdapter($this->searchable, $query, $options, $this->transformer);
}
}

View file

@ -39,8 +39,9 @@ class ElasticaLogger implements LoggerInterface
* @param array $data arguments
* @param float $time execution time
* @param array $connection host, port and transport of the query
* @param array $query arguments
*/
public function logQuery($path, $method, $data, $time, $connection = array())
public function logQuery($path, $method, $data, $time, $connection = array(), $query = array())
{
if ($this->debug) {
$this->queries[] = array(
@ -48,7 +49,8 @@ class ElasticaLogger implements LoggerInterface
'method' => $method,
'data' => $data,
'executionMS' => $time,
'connection' => $connection
'connection' => $connection,
'queryString' => $query,
);
}

View file

@ -22,6 +22,11 @@ class RawPaginatorAdapter implements PaginatorAdapterInterface
*/
private $query;
/**
* @var array search options
*/
private $options;
/**
* @var integer the number of hits
*/
@ -38,10 +43,11 @@ class RawPaginatorAdapter implements PaginatorAdapterInterface
* @param SearchableInterface $searchable the object to search in
* @param Query $query the query to search
*/
public function __construct(SearchableInterface $searchable, Query $query)
public function __construct(SearchableInterface $searchable, Query $query, array $options = array())
{
$this->searchable = $searchable;
$this->query = $query;
$this->options = $options;
}
/**
@ -72,7 +78,7 @@ class RawPaginatorAdapter implements PaginatorAdapterInterface
$query->setFrom($offset);
$query->setSize($itemCountPerPage);
$resultSet = $this->searchable->search($query);
$resultSet = $this->searchable->search($query, $this->options);
$this->totalHits = $resultSet->getTotalHits();
$this->facets = $resultSet->getFacets();
return $resultSet;

View file

@ -18,9 +18,9 @@ class TransformedPaginatorAdapter extends RawPaginatorAdapter
* @param Query $query the query to search
* @param ElasticaToModelTransformerInterface $transformer the transformer for fetching the results
*/
public function __construct(SearchableInterface $searchable, Query $query, ElasticaToModelTransformerInterface $transformer)
public function __construct(SearchableInterface $searchable, Query $query, array $options = array(), ElasticaToModelTransformerInterface $transformer)
{
parent::__construct($searchable, $query);
parent::__construct($searchable, $query, $options);
$this->transformer = $transformer;
}

View file

@ -19,23 +19,23 @@ class Repository
$this->finder = $finder;
}
public function find($query, $limit=null)
public function find($query, $limit = null, $options = array())
{
return $this->finder->find($query, $limit);
return $this->finder->find($query, $limit, $options);
}
public function findHybrid($query, $limit=null)
public function findHybrid($query, $limit = null, $options = array())
{
return $this->finder->findHybrid($query, $limit);
return $this->finder->findHybrid($query, $limit, $options);
}
public function findPaginated($query)
public function findPaginated($query, $options = array())
{
return $this->finder->findPaginated($query);
return $this->finder->findPaginated($query, $options);
}
public function createPaginatorAdapter($query)
public function createPaginatorAdapter($query, $options = array())
{
return $this->finder->createPaginatorAdapter($query);
return $this->finder->createPaginatorAdapter($query, $options);
}
}

View file

@ -44,6 +44,7 @@
{% for key, query in collector.queries %}
<li class="{{ cycle(['odd', 'even'], loop.index) }}">
<strong>Path</strong>: {{ query.path }}<br />
<strong>Query</strong>: {{ query.queryString|url_encode }}<br />
<strong>Method</strong>: {{ query.method }} <small>({{ query.connection.transport }} on {{ query.connection.host }}:{{ query.connection.port }})</small>
<div>
<code>{{ query.data|json_encode }}</code>
@ -60,7 +61,7 @@
</a>
<div style="display: none;" id="elastica_curl_query_{{ key }}">
<code>curl -X{{ query.method }} '{{ query.connection.transport|lower }}://{{ query.connection.host }}:{{ query.connection.port }}/{{ query.path }}' -d '{{ query.data|json_encode }}'</code>
<code>curl -X{{ query.method }} '{{ query.connection.transport|lower }}://{{ query.connection.host }}:{{ query.connection.port }}/{{ query.path }}{% if query.queryString|length %}?{{ query.queryString|url_encode }}{% endif %}' -d '{{ query.data|json_encode }}'</code>
</div>
{% endif %}
</li>

View file

@ -24,6 +24,7 @@ class ClientTest extends \PHPUnit_Framework_TestCase
Request::GET,
$this->isType('array'),
$this->isType('float'),
$this->isType('array'),
$this->isType('array')
);

View file

@ -70,6 +70,7 @@ class ElasticaLoggerTest extends \PHPUnit_Framework_TestCase
$data = array('data');
$time = 12;
$connection = array('host' => 'localhost', 'port' => '8999', 'transport' => 'https');
$query = array('search_type' => 'dfs_query_then_fetch');
$expected = array(
'path' => $path,
@ -77,9 +78,10 @@ class ElasticaLoggerTest extends \PHPUnit_Framework_TestCase
'data' => $data,
'executionMS' => $time,
'connection' => $connection,
'queryString' => $query,
);
$elasticaLogger->logQuery($path, $method, $data, $time, $connection);
$elasticaLogger->logQuery($path, $method, $data, $time, $connection, $query);
$returnedQueries = $elasticaLogger->getQueries();
$this->assertEquals($expected, $returnedQueries[0]);
}