/** * @group unit */ public function testSetTerms() { $field = 'color'; $terms = array('blue', 'green'); $filter = new Terms(); $filter->setTerms($field, $terms); $expected = array('terms' => array($field => $terms)); $this->assertEquals($expected, $filter->toArray()); $returnValue = $filter->setTerms($field, $terms); $this->assertInstanceOf('Elastica\\Filter\\Terms', $returnValue); }
/** * @group functional */ public function testShouldReturnTheRightNumberOfResult() { $filter = new Nested(); $this->assertEquals(array('nested' => array()), $filter->toArray()); $query = new Terms(); $query->setTerms('hobby', array('guitar')); $filter->setPath('hobbies'); $filter->setFilter($query); $client = $this->_getClient(); $search = new Search($client); $index = $this->_getIndexForTest(); $search->addIndex($index); $resultSet = $search->search($filter); $this->assertEquals(1, $resultSet->getTotalHits()); $filter = new Nested(); $this->assertEquals(array('nested' => array()), $filter->toArray()); $query = new Terms(); $query->setTerms('hobby', array('opensource')); $filter->setPath('hobbies'); $filter->setFilter($query); $client = $this->_getClient(); $search = new Search($client); $index = $this->_getIndexForTest(); $search->addIndex($index); $resultSet = $search->search($filter); $this->assertEquals(2, $resultSet->getTotalHits()); }
/** * @inheritDoc */ public function applyQueries($query, $alias = null, string $column = null, string $sort = null, array $ids = [], array $order = []) { if (!$query instanceof Filtered) { throw new \InvalidArgumentException('Expected argument of type "Elastica\\Query\\Filtered", ' . get_class($query) . ' given'); } if (!empty($ids)) { /** @var BoolFilter $filter */ $filter = $query->getFilter(); $idsFilter = new Terms(); $idsFilter->setTerms('id', $ids); $filter->addMust($idsFilter); $query->setFilter($filter); } $newQuery = new Query(); $newQuery->setQuery($query); $query = $newQuery; unset($newQuery); if ($column !== null && $sort !== null) { $query->addSort([$column => ['order' => strtolower($sort)]]); } unset($sort); if (!empty($order)) { foreach ($order as $sort => $o) { if ($column !== $sort) { $query->addSort([$sort => ['order' => strtolower($o)]]); } } } return $query; }
/** * @group functional */ public function testSignificantTermsAggregationWithBackgroundFilter() { $agg = new SignificantTerms('significantTerms'); $agg->setField('temperature'); $agg->setSize(1); $termsFilter = new TermsFilter(); $termsFilter->setTerms('color', array('blue', 'red', 'green', 'yellow')); $agg->setBackgroundFilter($termsFilter); $termsQuery = new Terms(); $termsQuery->setTerms('color', array('blue', 'red', 'green', 'yellow', 'white')); $query = new Query($termsQuery); $query->addAggregation($agg); $results = $this->_getIndexForTest()->search($query)->getAggregation('significantTerms'); $this->assertEquals(15, $results['buckets'][0]['doc_count']); $this->assertEquals(12, $results['buckets'][0]['bg_count']); $this->assertEquals('4500', $results['buckets'][0]['key_as_string']); }
/** * @param $appliedFilters * @param $elasticaQuery * * @return array */ public function applyFilterToElasticaQuery($appliedFilters, $elasticaQuery) { $rangeFilters = new BoolOr(); $boolFilter = new BoolFilter(); $filters = []; $termFilters = []; foreach ($appliedFilters as $facet) { if (strpos($facet[key($facet)], '|') !== false) { $filters[key($facet)][] = ['range' => explode('|', $facet[key($facet)])]; } else { $filters[key($facet)][] = $facet[key($facet)]; } } foreach ($filters as $name => $value) { if (is_array($value[0])) { foreach ($value as $range) { $rangeFilter = new FilterRange(); $rangeFilter->addField($name, ['gte' => $range['range'][0], 'lte' => $range['range'][1]]); $rangeFilters->addFilter($rangeFilter); } $boolFilter->addShould($rangeFilters); } else { $termFilters = new FilterTerms(); $termFilters->setTerms($name, $value); $boolFilter->addShould($termFilters); } } $elasticaQuery->setFilter($boolFilter); return [$termFilters, $rangeFilters, $boolFilter, $filters]; }
public function testShouldReturnTheRightNumberOfResult() { $f = new Nested(); $this->assertEquals(array('nested' => array()), $f->toArray()); $q = new Terms(); $q->setTerms('hobby', array('guitar')); $f->setPath('hobbies'); $f->setFilter($q); $c = $this->_getClient(); $s = new Search($c); $i = $c->getIndex('elastica_test_filter_nested_abstract_filter'); $s->addIndex($i); $r = $s->search($f); $this->assertEquals(1, $r->getTotalHits()); $f = new Nested(); $this->assertEquals(array('nested' => array()), $f->toArray()); $q = new Terms(); $q->setTerms('hobby', array('opensource')); $f->setPath('hobbies'); $f->setFilter($q); $c = $this->_getClient(); $s = new Search($c); $i = $c->getIndex('elastica_test_filter_nested_abstract_filter'); $s->addIndex($i); $r = $s->search($f); $this->assertEquals(2, $r->getTotalHits()); }