public function testFacetsFilter() { add_filter('elasticsearch_config_facets', function ($value) { return array('bar'); }, 10, 1); $this->assertEquals(array('bar'), Config::facets()); }
/** * @internal **/ public static function _buildQuery($search, $facets = array()) { global $blog_id; $search = str_ireplace(array(' and ', ' or '), array(' AND ', ' OR '), $search); $fields = array(); $musts = array(); $filters = array(); $scored = array(); foreach (Config::taxonomies() as $tax) { if ($search) { $score = Config::score('tax', $tax); if ($score > 0) { $scored[] = "{$tax}_name^{$score}"; } } self::_filterBySelectedFacets($tax, $facets, 'term', $musts, $filters); } $args = array(); $numeric = Config::option('numeric'); $exclude = Config::apply_filters('searcher_query_exclude_fields', array('post_date')); $fields = Config::fields(); self::_searchField($fields, 'field', $exclude, $search, $facets, $musts, $filters, $scored, $numeric); self::_searchField(Config::meta_fields(), 'meta', $exclude, $search, $facets, $musts, $filters, $scored, $numeric); if (count($scored) > 0 && $search) { $qs = array('fields' => $scored, 'query' => $search); $fuzzy = Config::option('fuzzy'); if ($fuzzy && strpos($search, "~") > -1) { $qs['fuzzy_min_sim'] = $fuzzy; } $qs = Config::apply_filters('searcher_query_string', $qs); $musts[] = array('query_string' => $qs); } if (in_array('post_type', $fields)) { self::_filterBySelectedFacets('post_type', $facets, 'term', $musts, $filters); } if (count($filters) > 0) { $args['filter']['bool']['should'] = $filters; } if (count($musts) > 0) { $args['query']['bool']['must'] = $musts; } $args['filter']['bool']['must'][] = array('term' => array('blog_id' => $blog_id)); $args = Config::apply_filters('searcher_query_pre_facet_filter', $args); if (in_array('post_type', $fields)) { $args['facets']['post_type']['terms'] = array('field' => 'post_type', 'size' => Config::apply_filters('searcher_query_facet_size', 100)); } // return facets foreach (Config::facets() as $facet) { $args['facets'][$facet]['terms'] = array('field' => $facet, 'size' => Config::apply_filters('searcher_query_facet_size', 100)); $args['facets'][$facet]['facet_filter'] = array('bool' => array('must' => array(array('term' => array('blog_id' => $blog_id))))); if (count($filters) > 0) { $applicable = array(); foreach ($filters as $filter) { if (isset($filter['term']) && !in_array($facet, array_keys($filter['term']))) { // do not filter on itself when using OR $applicable[] = $filter; } } if (count($applicable) > 0) { $args['facets'][$facet]['facet_filter']['bool']['should'] = $applicable; } } } if (is_array($numeric)) { foreach (array_keys($numeric) as $facet) { $ranges = Config::ranges($facet); if (count($ranges) > 0) { $args['facets'][$facet]['range'][$facet] = array_values($ranges); $args['facets'][$facet]['facet_filter'] = array('bool' => array('must' => array(array('term' => array('blog_id' => $blog_id))))); } } } return Config::apply_filters('searcher_query_post_facet_filter', $args); }