public function testRangesFieldFound()
 {
     update_option('field_range', '-10,10-20,20-');
     $ranges = Config::ranges('field');
     $this->assertCount(3, $ranges);
     $this->assertArrayHasKey('-10', $ranges);
     $this->assertCount(1, $ranges['-10']);
     $this->assertArrayHasKey('to', $ranges['-10']);
     $this->assertEquals(10, $ranges['-10']['to']);
     $this->assertArrayHasKey('10-20', $ranges);
     $this->assertCount(2, $ranges['10-20']);
     $this->assertArrayHasKey('to', $ranges['10-20']);
     $this->assertArrayHasKey('from', $ranges['10-20']);
     $this->assertEquals(10, $ranges['10-20']['from']);
     $this->assertEquals(20, $ranges['10-20']['to']);
     $this->assertArrayHasKey('20-', $ranges);
     $this->assertCount(1, $ranges['20-']);
     $this->assertArrayHasKey('from', $ranges['20-']);
     $this->assertEquals(20, $ranges['20-']['from']);
 }
 public static function _searchField($fields, $type, $exclude, $search, $facets, &$musts, &$filters, &$scored, $numeric)
 {
     foreach ($fields as $field) {
         if (in_array($field, $exclude)) {
             continue;
         }
         if ($search) {
             $score = Config::score($type, $field);
             $notanalyzed = Config::option('not_analyzed');
             if ($score > 0) {
                 if (strpos($search, "~") > -1 || isset($notanalyzed[$field])) {
                     // TODO: fuzzy doesn't work with english analyzer
                     $scored[] = "{$field}^{$score}";
                 } else {
                     $scored[] = "{$field}.english^{$score}";
                 }
             }
         }
         if (isset($numeric[$field]) && $numeric[$field]) {
             $ranges = Config::ranges($field);
             if (count($ranges) > 0) {
                 self::_filterBySelectedFacets($field, $facets, 'range', $musts, $filters, $ranges);
             }
         }
     }
 }
 /**
  * Analyse query parameters for range slugs and determine which facets are selected vs. which are available for the given field. Example of output:
  * 
  * <code>
  * 	array(
  * 		'available' => array(
  * 			'10-20' => array(
  * 				'count'	=> 4,
  * 				'slug'	=> '10-20',
  * 				'to'	=> 20,
  * 				'from'	=> 10
  * 			)			
  * 		),
  * 		'selected' => array(
  * 			'-20' => array(
  * 				'slug'	=> '-20',
  * 				'to'	=> 20
  * 			)			
  * 		),
  * 		'total' => 4
  * 	)
  * 	</code>
  * 
  * @param string $field The field to determine range facet information about
  *
  * @return array An associative array based on example provided
  **/
 static function range($field)
 {
     return self::_buildFacetResult($field, Config::ranges($field), function ($slug, $range, $facet) {
         $split = explode('-', $slug);
         return array('slug' => $slug, 'count' => $facet[$slug], 'to' => $split[1], 'from' => $split[0]);
     });
 }
 public static function _searchField($fields, $type, $exclude, $search, $facets, &$musts, &$filters, &$scored, $numeric)
 {
     foreach ($fields as $field) {
         if (in_array($field, $exclude)) {
             continue;
         }
         if ($search) {
             $score = Config::score($type, $field);
             $notanalyzed = Config::option('not_analyzed');
             if ($score > 0) {
                 if (strpos($search, "~") > -1 || isset($notanalyzed[$field])) {
                     // TODO: fuzzy doesn't work with english analyzer
                     $scored[] = "{$field}^{$score}";
                 } else {
                     $scored[] = sprintf("{$field}.%s^{$score}", Config::apply_filters('string_language', 'english'));
                 }
             }
         }
         if (isset($numeric[$field]) && $numeric[$field]) {
             $ranges = Config::ranges($field);
             if (count($ranges) > 0) {
                 $transformed = array();
                 foreach ($ranges as $key => $range) {
                     $transformed[$key] = array();
                     if (isset($range['to'])) {
                         $transformed[$key]['lt'] = $range['to'];
                     }
                     if (isset($range['from'])) {
                         $transformed[$key]['gte'] = $range['from'];
                     }
                 }
                 self::_filterBySelectedFacets($field, $facets, 'range', $musts, $filters, $transformed);
             }
         } else {
             if ($type == 'custom') {
                 self::_filterBySelectedFacets($field, $facets, 'term', $musts, $filters);
             }
         }
     }
 }