4.3-extending-usage.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. require(__DIR__.'/init.php');
  3. use Solarium\Client;
  4. use Solarium\QueryType\Select\Query\Query as Select;
  5. htmlHeader();
  6. // In most cases using the API or config is advisable, however in some cases it can make sense to extend classes.
  7. // This makes it possible to create 'query inheritance' like in this example
  8. class ProductQuery extends Select
  9. {
  10. protected function init()
  11. {
  12. parent::init();
  13. // basic params
  14. $this->setQuery('*:*');
  15. $this->setStart(2)->setRows(20);
  16. $this->setFields(array('id','name','price'));
  17. $this->addSort('price', self::SORT_ASC);
  18. // create a facet field instance and set options
  19. $facetSet = $this->getFacetSet();
  20. $facetSet->createFacetField('stock')->setField('inStock');
  21. }
  22. }
  23. // This query inherits all of the query params of its parent (using parent::init) and adds some more
  24. // Ofcourse it could also alter or remove settings
  25. class ProductPriceLimitedQuery extends ProductQuery
  26. {
  27. protected function init()
  28. {
  29. parent::init();
  30. // create a filterquery
  31. $this->createFilterQuery('maxprice')->setQuery('price:[1 TO 300]');
  32. }
  33. }
  34. // create a client instance
  35. $client = new Client($config);
  36. // create a query instance
  37. $query = new ProductPriceLimitedQuery;
  38. // this executes the query and returns the result
  39. $resultset = $client->select($query);
  40. // display the total number of documents found by solr
  41. echo 'NumFound: '.$resultset->getNumFound();
  42. // display facet counts
  43. echo '<hr/>Facet counts for field "inStock":<br/>';
  44. $facet = $resultset->getFacetSet()->getFacet('stock');
  45. foreach ($facet as $value => $count) {
  46. echo $value . ' [' . $count . ']<br/>';
  47. }
  48. // show documents using the resultset iterator
  49. foreach ($resultset as $document) {
  50. echo '<hr/><table>';
  51. echo '<tr><th>id</th><td>' . $document->id . '</td></tr>';
  52. echo '<tr><th>name</th><td>' . $document->name . '</td></tr>';
  53. echo '<tr><th>price</th><td>' . $document->price . '</td></tr>';
  54. echo '</table>';
  55. }
  56. htmlFooter();