예제 #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());
 }
예제 #2
0
 /**
  * @group unit
  * @expectedException \Elastica\Exception\InvalidException
  */
 public function testAddMustInvalidException()
 {
     $filter = new BoolFilter();
     $filter->addMust('fail!');
 }
예제 #3
0
 /**
  * @param BoolFilter $boolFilter
  */
 public function addAvailableProductsFilters(BoolFilter $boolFilter)
 {
     $enabledFilter = new FilterTerm(array('enabled' => true));
     $boolFilter->addMust($enabledFilter);
     $nestedOrFilter = new BoolOr();
     $this->addAvailableProductsVariantFilters($nestedOrFilter, 'variants');
     $boolFilter->addMust($nestedOrFilter);
 }
예제 #4
0
 /**
  * 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;
 }