* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ /** * Helper stuff for working with the ElasticSearch DSL * How to build a mildly complex query: * $dsl = new ElasticSearchDSL; * $bool = $dsl->bool(); // Return a new bool structure * * @author Raymond Julin * @package ElasticSearchClient * @since 0.1 * Created: 2010-07-23 */ class Builder { protected $dsl = array(); private $explain = null; private $from = null; private $size = null; private $fields = null; private $query = null; private $facets = null; private $sort = null; /** * Construct DSL object * * @return \Mall\Framework\SearchClient\DSL\Builder * @param array $options */ public function __construct(array $options=array()) { foreach ($options as $key => $value) $this->$key = $value; } /** * Add array clause, can only be one * * @return \Mall\Framework\SearchClient\DSL\Query * @param array $options */ public function query(array $options=array()) { if (!($this->query instanceof Query)) $this->query = new Query($options); return $this->query; } /** * Build the DSL as array * * @throws \ElasticSearch\Exception * @return array */ public function build() { $built = array(); if ($this->from != null) $built['from'] = $this->from; if ($this->size != null) $built['size'] = $this->size; if ($this->sort && is_array($this->sort)) $built['sort'] = $this->sort; if (!$this->query) throw new \ElasticSearch\Exception("Query must be specified"); else $built['query'] = $this->query->build(); return $built; } }