Location: PHPKode > scripts > Fantastic ElasticSearch > wordpress-fantastic-elasticsearch-1.1.2/lib/Elastica/Facet/Range.php
<?php
/**
 * Implements the range facet.
 *
 * @category Xodoa
 * @package Elastica
 * @author Jasper van Wanrooy <hide@address.com>
 * @link http://www.elasticsearch.org/guide/reference/api/search/facets/range-facet.html
 */
class Elastica_Facet_Range extends Elastica_Facet_Abstract
{
    /**
     * Sets the field for the range.
     *
     * @param  string               $field The name of the field for range.
     * @return Elastica_Facet_Range
     */
    public function setField($field)
    {
        return $this->setParam('field', $field);
    }

    /**
     * Sets the fields by their separate key and value fields.
     *
     * @param  string               $keyField   The key_field param for the range.
     * @param  string               $valueField The key_value param for the range.
     * @return Elastica_Facet_Range
     */
    public function setKeyValueFields($keyField, $valueField)
    {
        return $this->setParam('key_field', $keyField)
                    ->setParam('value_field', $valueField);
    }

    /**
     * Sets the key and value for this facet by script.
     *
     * @param string $keyScript   Script to check whether it falls into the range.
     * @param string $valueScript Script to use for statistical calculations.
     */
    public function setKeyValueScripts($keyScript, $valueScript)
    {
        return $this->setParam('key_script', $keyScript)
                    ->setParam('value_script', $valueScript);
    }

    /**
     * Sets the ranges for the facet all at once. Sample ranges:
     * array (
     *     array('to' => 50),
     *     array('from' => 20, 'to' 70),
     *     array('from' => 70, 'to' => 120),
     *     array('from' => 150)
     * )
     *
     * @param  array                $ranges Numerical array with range definitions.
     * @return Elastica_Facet_Range
     */
    public function setRanges(array $ranges)
    {
        return $this->setParam('ranges', $ranges);
    }

    /**
     * Adds a range to the range facet.
     *
     * @param  mixed                $from The from for the range.
     * @param  mixed                $to   The to for the range.
     * @return Elastica_Facet_Range
     */
    public function addRange($from = null, $to = null)
    {
        if (!isset($this->_params['ranges']) || !is_array($this->_params['ranges'])) {
            $this->_params['ranges'] = array();
        }

        $this->_params['ranges'][] = array('from' => $from, 'to' => $to);

        return $this;
    }

    /**
     * Creates the full facet definition, which includes the basic
     * facet definition of the parent.
     *
     * @see Elastica_Facet_Abstract::toArray()
     * @throws Elastica_Exception_Invalid When the right fields haven't been set.
     * @return array
     */
    public function toArray()
    {
        /**
         * Check the facet for validity.
         * There are three ways to set the key and value field for the range:
         *  - a single field for both key and value; or
         *  - separate fields for key and value; or
         *  - separate scripts for key and value.
         */
        $fieldTypesSet = 0;
        if (isset($this->_params['field'])) {
            $fieldTypesSet++;
        }
        if (isset($this->_params['key_field'])) {
            $fieldTypesSet++;
        }
        if (isset($this->_params['key_script'])) {
            $fieldTypesSet++;
        }

        if ($fieldTypesSet === 0) {
            throw new Elastica_Exception_Invalid('Neither field, key_field nor key_script is set.');
        } elseif ($fieldTypesSet > 1) {
            throw new Elastica_Exception_Invalid('Either field, key_field and key_value or key_script and value_script should be set.');
        }

        /**
         * Set the range in the abstract as param.
         */
        $this->_setFacetParam('range', $this->_params);

        return parent::toArray();
    }
}
Return current item: Fantastic ElasticSearch