/**
  * Executes search.
  *
  * @param SearchRequest $request
  *
  * @return SearchResponse
  */
 public function search(SearchRequest $request)
 {
     $search = $this->container->buildSearch($request);
     /** @var FilterInterface[] $filters */
     foreach ($this->container->all() as $name => $filter) {
         // We simply exclude not related filters and current filter itself.
         $relatedFilters = $this->container->getFiltersByRelation(new AndRelation([$filter->getSearchRelation(), new ExcludeRelation([$name])]));
         $filter->preProcessSearch($search, $this->container->buildSearch($request, $relatedFilters), $request->get($name));
     }
     $result = $this->repository->execute($search);
     return new SearchResponse($this->getFiltersViewData($result, $request), $result, $this->composeUrlParameters($request));
 }
 /**
  * Returns scan results iterator.
  *
  * @param Repository $repository
  * @param int        $chunkSize
  *
  * @return RawResultIterator
  */
 protected function getResults(Repository $repository, $chunkSize)
 {
     $search = $repository->createSearch();
     $search->setScroll()->setSize($chunkSize);
     $search->addQuery(new MatchAllQuery());
     return $repository->execute($search, Repository::RESULTS_RAW_ITERATOR);
 }
 /**
  * Test 'scroll' functionality.
  */
 public function testSearchScroll()
 {
     $search = $this->repository->createSearch();
     $search->setSize(2);
     $search->setScroll('1m');
     $search->addQuery(new MatchAllQuery());
     $results = $this->repository->execute($search, Repository::RESULTS_RAW);
     $this->assertArrayHasKey('_scroll_id', $results);
 }
 /**
  * Test for getTypes().
  *
  * @param array $types
  * @param array $expectedTypes
  * @param array $bundlesMapping
  *
  * @dataProvider getExecuteData
  */
 public function testGetTypes($types, $expectedTypes, $bundlesMapping)
 {
     $manager = $this->getMockBuilder('ONGR\\ElasticsearchBundle\\ORM\\Manager')->disableOriginalConstructor()->getMock();
     $manager->expects($this->exactly(2))->method('getBundlesMapping')->willReturn($bundlesMapping);
     $connection = $this->getMockBuilder('ONGR\\ElasticsearchBundle\\Client\\Connection')->disableOriginalConstructor()->getMock();
     $connection->expects($this->once())->method('search')->with($expectedTypes, [], [])->willReturn(['test']);
     $manager->expects($this->once())->method('getConnection')->willReturn($connection);
     $search = new Search();
     $repository = new Repository($manager, $types);
     $results = $repository->execute($search, Repository::RESULTS_RAW);
     $this->assertEquals(['test'], $results);
 }
 /**
  * Create and execute highlighted search.
  *
  * @param Repository $repository
  * @param TermQuery  $termQuery
  * @param Highlight  $highlight
  * @param string     $resultsType
  *
  * @return array|Product[]
  */
 private function executeHighlight($repository, $termQuery, $highlight, $resultsType = Repository::RESULTS_RAW)
 {
     $search = $repository->createSearch()->addQuery($termQuery)->setHighlight($highlight);
     $results = $repository->execute($search, $resultsType);
     return $results;
 }