Пример #1
0
 /**
  * @group unit
  */
 public function testConstruct()
 {
     $ids1 = new Ids('foo', array(1, 2));
     $ids2 = new Ids('bar', array(3, 4));
     $and1 = new BoolOr(array($ids1, $ids2));
     $and2 = new BoolOr();
     $and2->addFilter($ids1);
     $and2->addFilter($ids2);
     $this->assertEquals($and1->toArray(), $and2->toArray());
 }
 public function testToArray()
 {
     $orFilter = new BoolOr();
     $filter1 = new Ids();
     $filter1->setIds('1');
     $filter2 = new Ids();
     $filter2->setIds('2');
     $orFilter->addFilter($filter1);
     $orFilter->addFilter($filter2);
     $expectedArray = array('or' => array($filter1->toArray(), $filter2->toArray()));
     $this->assertEquals($expectedArray, $orFilter->toArray());
 }
Пример #3
0
 /**
  * @group functional
  */
 public function testOrFilter()
 {
     $index = $this->_createIndex();
     $type = $index->getType('test');
     $doc1 = new Document('', array('categoryId' => 1));
     $doc2 = new Document('', array('categoryId' => 2));
     $doc3 = new Document('', array('categoryId' => 3));
     $type->addDocument($doc1);
     $type->addDocument($doc2);
     $type->addDocument($doc3);
     $index->refresh();
     $boolOr = new \Elastica\Filter\BoolOr();
     $boolOr->addFilter(new \Elastica\Filter\Term(array('categoryId' => '1')));
     $boolOr->addFilter(new \Elastica\Filter\Term(array('categoryId' => '2')));
     $resultSet = $type->search($boolOr);
     $this->assertEquals(2, $resultSet->count());
 }
Пример #4
0
    /**
     * or filter
     *
     * @link http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-or-filter.html
     * @param  AbstractFilter[] $filters
     * @return BoolOr
     */
    public function bool_or($filters)
    {
        $or = new BoolOr();
        $or->setFilters($filters);

        return $or;
    }
Пример #5
0
 /**
  * @return array
  */
 protected function addFilters()
 {
     if (!isset($_GET['filters'])) {
         return false;
     }
     $filterCount = 0;
     $filters = new El\Filter\Bool();
     foreach ($_GET['filters'] as $key => $filterValue) {
         $filterCatCount = 0;
         $filterPart = new El\Filter\BoolOr();
         foreach ($filterValue as $term => $enabled) {
             if ($enabled == 'true') {
                 $term = str_replace('_', ' ', $term);
                 $filter = new El\Filter\Term();
                 $filter->setTerm($key, $term);
                 $filterPart->addFilter($filter);
                 $filterCount++;
                 $filterCatCount++;
             }
         }
         if ($filterCatCount > 0) {
             $filters->addMust($filterPart);
         }
     }
     if ($filterCount === 0) {
         return false;
     }
     return $filters;
 }
 public function or_()
 {
     // @codingStandardsIgnoreEnd
     $filters = func_get_args();
     $or = new Filter\BoolOr();
     foreach ($filters as $filter) {
         $or->addFilter($filter);
     }
     return $or;
 }
Пример #7
0
 /**
  * Combines all the passed arguments in a single BoolOr filter.
  *
  * ### Example:
  *
  * {{{
  *  $bool = $builder->or(
  *     $builder->missing('tags'),
  *     $builder->exists('comments')
  *  );
  * }}}
  *
  * @return Elastica\Filter\BoolOr
  */
 public function or_()
 {
     $filters = func_get_args();
     $or = new Filter\BoolOr();
     foreach ($filters as $filter) {
         $or->addFilter($filter);
     }
     return $or;
 }
Пример #8
0
 /**
  * @param BoolOr $nestedOrFilter Nested or filter
  * @param string $nestedProperty Nested property (can be 'variants')
  */
 private function addAvailableProductsVariantFilters(BoolOr $nestedOrFilter, $nestedProperty)
 {
     $variantsNestedBool = new BoolQuery();
     $variantsNestedBool->setMinimumNumberShouldMatch(1);
     $availableOn = new QueryRange($nestedProperty . '.availableOn', array('lte' => "now"));
     $variantsNestedBool->addMust($availableOn);
     $availableUntil = new Filtered();
     $availableUntilFilter = new BoolOr();
     $availableUntilNull = new Missing($nestedProperty . '.availableUntil');
     $availableUntilFilter->addFilter($availableUntilNull);
     $availableUntilGte = new FilterRange($nestedProperty . '.availableUntil', array('gte' => time()));
     $availableUntilFilter->addFilter($availableUntilGte);
     $availableUntil->setFilter($availableUntilFilter);
     $variantsNestedBool->addMust($availableUntil);
     $availableOnDemand = new QueryTerm(array($nestedProperty . '.availableOnDemand' => true));
     $variantsNestedBool->addShould($availableOnDemand);
     $onHand = new QueryRange($nestedProperty . '.onHand', array('gt' => 0));
     $variantsNestedBool->addShould($onHand);
     $nested = new Nested();
     $nested->setPath($nestedProperty);
     $nested->setQuery($variantsNestedBool);
     $nestedOrFilter->addFilter($nested);
 }
Пример #9
0
 /**
  * @return BoolOr
  */
 private function addFilters()
 {
     //		$filterCount = 0;
     $filters = new Bool();
     $typeFilter = new Type('issue');
     $filters->addMust($typeFilter);
     if (!isset($_GET['filters'])) {
         return $filters;
     }
     foreach ($_GET['filters'] as $key => $filterValue) {
         $filterCatCount = 0;
         $filterPart = new BoolOr();
         foreach ($filterValue as $term => $enabled) {
             if ($enabled == 'true') {
                 $term = str_replace('_', ' ', $term);
                 $filter = new Term();
                 if ($key == 'tracker' || $key == 'project' || $key == 'category' || $key == 'status' || $key == 'author' || $key == 'priority' || $key == 'fixed_version') {
                     $filter->setTerm($key . '.name', $term);
                 } else {
                     $filter->setTerm($key, $term);
                 }
                 $filterPart->addFilter($filter);
                 //					$filterCount++;
                 $filterCatCount++;
             }
         }
         if ($filterCatCount > 0) {
             $filters->addMust($filterPart);
         }
     }
     //		if($filterCount === 0) {
     //			return false;
     //		}
     return $filters;
 }