Beispiel #1
0
 /**
  * @group functional
  */
 public function testSearchByDocument()
 {
     $client = $this->_getClient(array('persistent' => false));
     $index = $client->getIndex('elastica_test');
     $index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true);
     $type = new Type($index, 'mlt_test');
     $type->addDocuments(array(new Document(1, array('visible' => true, 'name' => 'bruce wayne batman')), new Document(2, array('visible' => true, 'name' => 'bruce wayne')), new Document(3, array('visible' => false, 'name' => 'bruce wayne')), new Document(4, array('visible' => true, 'name' => 'batman')), new Document(5, array('visible' => false, 'name' => 'batman')), new Document(6, array('visible' => true, 'name' => 'superman')), new Document(7, array('visible' => true, 'name' => 'spiderman'))));
     $index->refresh();
     $doc = $type->getDocument(1);
     // Return all similar
     $mltQuery = new MoreLikeThis();
     $mltQuery->setMinTermFrequency(1);
     $mltQuery->setMinDocFrequency(1);
     $mltQuery->setLike($doc);
     $query = new Query($mltQuery);
     $resultSet = $type->search($query);
     $this->assertEquals(4, $resultSet->count());
     $mltQuery = new MoreLikeThis();
     $mltQuery->setMinTermFrequency(1);
     $mltQuery->setMinDocFrequency(1);
     $mltQuery->setLike($doc);
     $query = new Query\Filtered($mltQuery);
     // Return just the visible similar
     $filter = new BoolFilter();
     $filterTerm = new Term();
     $filterTerm->setTerm('visible', true);
     $filter->addMust($filterTerm);
     $query->setFilter($filter);
     $resultSet = $type->search($query);
     $this->assertEquals(2, $resultSet->count());
 }
Beispiel #2
0
 /**
  * @group unit
  * @expectedException \Elastica\Exception\InvalidException
  */
 public function testAddShouldInvalidException()
 {
     $filter = new BoolFilter();
     $filter->addShould('fail!');
 }
Beispiel #3
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];
 }
 /**
  * getFilter
  *
  * @access private
  * @return AbstractFilter
  */
 private function getFilter()
 {
     if (!$this->filterList) {
         return null;
     }
     if (count($this->filterList) == 1) {
         return current($this->filterList);
     }
     $boolFilters = [];
     $andFilters = [];
     foreach ($this->filterList as $tmpFilter) {
         if ($this->isAndFilter($tmpFilter)) {
             $andFilters[] = $tmpFilter;
         } else {
             $boolFilters[] = $tmpFilter;
         }
     }
     $boolFilter = null;
     $nbBoolFilters = count($boolFilters);
     if ($nbBoolFilters > 1) {
         $boolFilter = new Filter\BoolFilter();
         foreach ($boolFilters as $tmpFilter) {
             $boolFilter->addMust($tmpFilter);
         }
         array_unshift($andFilters, $boolFilter);
     } elseif ($nbBoolFilters == 1) {
         $andFilters = array_merge($boolFilters, $andFilters);
     }
     $nbAndFilters = count($andFilters);
     if ($nbAndFilters == 1) {
         return current($andFilters);
     } elseif ($nbAndFilters > 1) {
         $filter = new Filter\BoolAnd();
         $filter->setFilters($andFilters);
         return $filter;
     }
     return null;
 }