コード例 #1
0
 /**
  * @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());
 }
コード例 #2
0
ファイル: DataProvider.php プロジェクト: vardius/list-bundle
 /**
  * @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;
 }
コード例 #3
0
 /**
  * @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']);
 }
コード例 #4
0
 public function findByUserAndTags(User $user, $tags = null)
 {
     $filterQuery = new Query\Filtered();
     $searchFilter = new Filter\Bool();
     $searchFilter->addMust(new Filter\Term(array('user' => $user->getId())));
     if (!empty($tags)) {
         $tagFilter = new Filter\Terms('tags', explode('+', $tags));
         $tagFilter->setExecution('and');
         $searchFilter->addMust($tagFilter);
     }
     $filterQuery->setFilter($searchFilter);
     $searchQuery = new Query($filterQuery);
     $searchQuery->addSort(array('createdAt' => 'desc'));
     $agg = new Aggregation\Terms('tags');
     $agg->setField('tags')->setOrder('_count', 'desc')->setSize(100);
     $searchQuery->addAggregation($agg);
     return $searchQuery;
 }
コード例 #5
0
 public function testLookup()
 {
     $index = $this->_createIndex('terms_filter_test');
     $type1 = $index->getType('musicians');
     $type2 = $index->getType('bands');
     //index some test data
     $type1->addDocument(new \Elastica\Document(1, array('name' => 'robert', 'lastName' => 'plant')));
     $type1->addDocument(new \Elastica\Document(2, array('name' => 'jimmy', 'lastName' => 'page')));
     $type1->addDocument(new \Elastica\Document(3, array('name' => 'john paul', 'lastName' => 'jones')));
     $type1->addDocument(new \Elastica\Document(4, array('name' => 'john', 'lastName' => 'bonham')));
     $type1->addDocument(new \Elastica\Document(5, array('name' => 'jimi', 'lastName' => 'hendrix')));
     $type2->addDocument(new \Elastica\Document('led zeppelin', array('members' => array('plant', 'page', 'jones', 'bonham'))));
     $index->refresh();
     //use the terms lookup feature to query for some data
     $termsFilter = new Terms();
     $termsFilter->setLookup('lastName', $type2, 'led zeppelin', 'members', NULL);
     $query = new \Elastica\Query();
     $query->setFilter($termsFilter);
     $results = $index->search($query);
     $this->assertEquals($results->count(), 4, 'Terms lookup with null index');
     $termsFilter->setLookup('lastName', $type2, 'led zeppelin', 'members', $index);
     $query->setFilter($termsFilter);
     $results = $index->search($query);
     $this->assertEquals($results->count(), 4, 'Terms lookup with index as object');
     //Query with index given as string
     $termsFilter->setLookup('lastName', $type2, 'led zeppelin', 'members', $index->getName());
     $query->setFilter($termsFilter);
     $results = $index->search($query);
     $this->assertEquals($results->count(), 4, 'Terms lookup with index as string');
     //Query with array of options
     $termsFilter->setLookup('lastName', $type2, 'led zeppelin', 'members', array('index' => $index, 'cache' => false));
     $query->setFilter($termsFilter);
     $results = $index->search($query);
     $this->assertEquals($results->count(), 4, 'Terms lookup with options array');
     $index->delete();
 }
コード例 #6
0
ファイル: TermsTest.php プロジェクト: vinusebastian/Elastica
 /**
  * @group unit
  * @expectedException \Elastica\Exception\InvalidException
  */
 public function testToArrayInvalidException()
 {
     $filter = new Terms();
     $filter->toArray();
 }
 /**
  * Build a Search that will count all pages that link to $titles.
  * @param string $titles title in prefixedDBKey form
  * @return Search that counts all pages that link to $titles
  */
 private function buildCount($titles)
 {
     $filter = new Terms('outgoing_link', $titles);
     $filter->setCached(false);
     // We're not going to be redoing this any time soon.
     $type = $this->connection->getPageType(wfWikiId());
     $search = new Search($type->getIndex()->getClient());
     $search->addIndex($type->getIndex());
     $search->addType($type);
     $search->setOption(Search::OPTION_SEARCH_TYPE, Search::OPTION_SEARCH_TYPE_COUNT);
     $matchAll = new MatchAll();
     $search->setQuery(new Filtered($matchAll, $filter));
     $search->getQuery()->addParam('stats', 'link_count');
     return $search;
 }
コード例 #8
0
 /**
  * @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());
 }