setSerializer(new ArraySerializer()); $fractal->parseIncludes([]); $searchView = new SearchResultView($this->doSearch($request)); $ret = $fractal->createData(new Item($searchView, new V2SearchTransformer()))->toArray(); return Result::create($request, $ret)->createResponse(); } /** * @param Request $request * @return SearchEngineResult */ private function doSearch(Request $request) { $options = SearchEngineOptions::fromRequest($this->app, $request); $options->setFirstResult($request->get('offset_start') ?: 0); $options->setMaxResults($request->get('per_page') ?: 10); $query = (string) $request->get('query'); $this->getSearchEngine()->resetCache(); $result = $this->getSearchEngine()->query($query, $options); $this->getUserManipulator()->logQuery($this->getAuthenticatedUser(), $result->getQuery()); foreach ($options->getDataboxes() as $databox) { $colls = array_map(function (\collection $collection) { return $collection->get_coll_id(); }, array_filter($options->getCollections(), function (\collection $collection) use ($databox) { return $collection->get_databox()->get_sbas_id() == $databox->get_sbas_id(); })); $this->getSearchEngineLogger() ->log($databox, $result->getQuery(), $result->getTotal(), $colls); } $this->getSearchEngine()->clearCache(); return $result; } /** * @return SearchEngineInterface */ private function getSearchEngine() { return $this->app['phraseanet.SE']; } /** * @return UserManipulator */ private function getUserManipulator() { return $this->app['manipulator.user']; } /** * @return SearchEngineLogger */ private function getSearchEngineLogger() { return $this->app['phraseanet.SE.logger']; } }