Beispiel #1
0
 /**
  * {@inheritdoc}
  * @throws \Elodex\Exceptions\InvalidArgumentException
  */
 public function scroll(Search $search, callable $callback)
 {
     $duration = $search->getScroll();
     if (is_null($duration)) {
         throw new InvalidArgumentException('Scroll duration missing on search query.');
     }
     // Get the first result for the scrolling request.
     $result = $this->search($search);
     $scrollId = $result->getScrollId();
     try {
         // Callback for the first set of results.
         call_user_func($callback, $result);
         // Check if we do have more documents than we got from the first call.
         if (count($result) < $result->totalHits()) {
             // Scroll through the results until we don't get any more hits.
             while (true) {
                 $result = $this->scrollRequest($scrollId, $duration);
                 $scrollId = $result->getScrollId();
                 // Check if we didn't get any more results.
                 if (count($result) === 0) {
                     break;
                 }
                 call_user_func($callback, $result);
             }
         }
     } finally {
         $this->clearScroll($scrollId);
     }
 }
 /**
  * Create a new index search query.
  *
  * @return \Elodex\Search
  */
 public function newIndexSearch()
 {
     $search = new Search();
     $search->setModel($this);
     return $search;
 }