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); } } } }