public function testToArray()
 {
     $mainBool = new Bool();
     $idsFilter1 = new Ids();
     $idsFilter1->setIds(1);
     $idsFilter2 = new Ids();
     $idsFilter2->setIds(2);
     $idsFilter3 = new Ids();
     $idsFilter3->setIds(3);
     $childBool = new Bool();
     $childBool->addShould(array($idsFilter1, $idsFilter2));
     $mainBool->addShould(array($childBool, $idsFilter3));
     $expectedArray = array('bool' => array('should' => array(array(array('bool' => array('should' => array(array($idsFilter1->toArray(), $idsFilter2->toArray())))), $idsFilter3->toArray()))));
     $this->assertEquals($expectedArray, $mainBool->toArray());
 }
 /**
  * @param string $term text to search
  * @return \Status
  */
 public function searchText($term)
 {
     $term = trim($term);
     // No searching for nothing!  That takes forever!
     if (!$term) {
         return null;
     }
     $query = new Query();
     $offset = min($this->offset, static::MAX_OFFSET);
     if ($offset) {
         $query->setFrom($offset);
     }
     if ($this->limit) {
         $query->setSize($this->limit);
     }
     $filter = new Bool();
     // filters
     if ($this->namespaces) {
         $filter->addMust(new Terms('namespace', $this->namespaces));
     }
     if ($this->pageIds) {
         $filter->addMust(new Terms('pageid', $this->pageIds));
     }
     if ($this->moderationStates) {
         $filter->addMust(new Terms('revisions.moderation_state', $this->moderationStates));
     }
     // only apply filters if there are any
     if ($filter->toArray()) {
         $query->setFilter($filter);
     }
     $sortArgs = $this->getSortArgs();
     if (isset($sortArgs[$this->sort]) && $sortArgs[$this->sort]) {
         $query->setSort($sortArgs[$this->sort]);
     }
     // @todo: interwiki stuff? (see \CirrusSearch)
     $searcher = new Searcher($query, false, $this->type);
     return $searcher->searchText($term);
 }