/**
  *
  * @Route("", name="centrale_lille_searchuser")
  * @Method("GET")
  */
 public function searchAction(Request $request)
 {
     $search = new SearchString();
     $searchForm = $this->get('form.factory')->createNamed('', 'string_search_type', $search, array('action' => $this->generateUrl('centrale_lille_searchuser'), 'method' => 'GET'));
     $searchForm->handleRequest($request);
     $search = $searchForm->getData();
     if (is_null($search->getStringSearch())) {
         $result_machine = [];
         $result_user = [];
     } else {
         //Recherche User
         $typeUser = $this->get('fos_elastica.index.fablab.User');
         $query_part_user = new \Elastica\Query\BoolQuery();
         $fieldQuery = new \Elastica\Query\Match();
         $fieldQuery2 = new \Elastica\Query\Match();
         $fieldQuery->setFieldQuery('email', $search->getStringSearch());
         $fieldQuery->setFieldQuery('email', $search->getStringSearch());
         $fieldQuery->setFieldFuzziness('email', 0.7);
         $query_part_user->addShould($fieldQuery);
         $fieldQuery2->setFieldQuery('username', $search->getStringSearch());
         $fieldQuery2->setFieldQuery('username', $search->getStringSearch());
         $fieldQuery2->setFieldFuzziness('username', 0.7);
         $query_part_user->addShould($fieldQuery2);
         $filters = new \Elastica\Filter\Bool();
         $query_user = new \Elastica\Query\Filtered($query_part_user, $filters);
         $result_user = $typeUser->search($query_user);
         //Recherche Machine
         $typeMachine = $this->get('fos_elastica.index.fablab.Machine');
         $query_part_machine = new \Elastica\Query\Bool();
         $fieldQuery3 = new \Elastica\Query\Match();
         $fieldQuery4 = new \Elastica\Query\Match();
         $fieldQuery3->setFieldQuery('machine_name', $search->getStringSearch());
         $fieldQuery3->setFieldFuzziness('machine_name', 0.7);
         $fieldQuery3->setFieldMinimumShouldMatch('machine_name', '80%');
         $query_part_machine->addShould($fieldQuery3);
         $fieldQuery4->setFieldQuery('description', $search->getStringSearch());
         $fieldQuery4->setFieldFuzziness('description', 2);
         $fieldQuery4->setFieldMinimumShouldMatch('description', '100%');
         $query_part_machine->addShould($fieldQuery4);
         $filters = new \Elastica\Filter\Bool();
         $query_machine = new \Elastica\Query\Filtered($query_part_machine, $filters);
         $result_machine = $typeMachine->search($query_machine);
         //Recherche Machine
         $typeMachine = $this->get('fos_elastica.index.fablab.Machine');
         $query_part_machine = new \Elastica\Query\Bool();
         $fieldQuery3 = new \Elastica\Query\Match();
         $fieldQuery4 = new \Elastica\Query\Match();
         $fieldQuery3->setFieldQuery('machine_name', $search->getStringSearch());
         // $fieldQuery3->setFieldFuzziness('machine.machine_name', 0.7);
         //$fieldQuery3->setFieldMinimumShouldMatch('machine_name', '80%');
         $query_part_machine->addShould($fieldQuery3);
         $fieldQuery4->setFieldQuery('description', $search->getStringSearch());
         // $fieldQuery4->setFieldFuzziness('machine.machine_name', 0.7);
         //$fieldQuery4->setFieldMinimumShouldMatch('machine_name', '100%');
         $query_part_machine->addShould($fieldQuery4);
     }
     return $this->render('CentraleLilleSearchBundle:Default:search.html.twig', array('result_user' => $result_user, 'result_machine' => $result_machine, 'form' => $searchForm->createView(), 'search' => $search->getStringSearch()));
 }
 /**
  * Lists all Demo entities.
  *
  * @Route("/", name="demo_index")
  * @Method("GET")
  */
 public function indexAction()
 {
     $type = $this->get('fos_elastica.index.fablab.User');
     $query_part = new \Elastica\Query\Bool();
     $query_part->addShould(new \Elastica\Query\Term(array('email' => array('value' => 'cyprien'))));
     $query_part->addShould(new \Elastica\Query\Term(array('username' => array('value' => 'cyprien'))));
     $filters = new \Elastica\Filter\Bool();
     $query = new \Elastica\Query\Filtered($query_part, $filters);
     $result = $type->search($query);
     return $this->render('demo/index.html.twig', array('demos' => $result));
 }
 /**
  * @Route("/search/",name="search")
  * @Template()
  */
 public function searchAction(Request $request)
 {
     $finder = $this->container->get('fos_elastica.finder.pages.page');
     $boolQuery = new \Elastica\Query\Bool();
     $boolQuery->addShould(new \Elastica\Query\Fuzzy('title', $request->get('q')));
     $boolQuery->addShould(new \Elastica\Query\Fuzzy('content', $request->get('q')));
     // $fuzzy->addField('content', array('value'=>$request->get('q')));
     $pages = $finder->find($boolQuery);
     /** var array of Acme\UserBundle\Entity\User limited to 10 results */
     // $users = $finder->find('bob', 10);
     return array('pages' => $pages);
 }
 /**
  * @param $searchText
  * @return array<Article>
  */
 public function findSousTitres($searchText)
 {
     $query_part = new \Elastica\Query\Bool();
     $query_part->addShould(new \Elastica\Query\Term(array('value' => array('value' => $searchText, 'boost' => 3))));
     $query_part->addShould(new \Elastica\Query\Term(array('intitule' => array('value' => $searchText))));
     $filters = new \Elastica\Filter\Bool();
     $filters->addMust(new \Elastica\Filter\Term(array('langue' => 'fr')));
     $query = new \Elastica\Query\Filtered($query_part, $filters);
     // return $this->findHybrid($query); pour avoir aussi un ES Result
     $res = $this->find($query);
     return $res;
 }
 public function search($q = '')
 {
     if ($q == '') {
         $baseQuery = new \Elastica\Query\MatchAll();
     } else {
         $baseQuery = new \Elastica\Query\Bool();
         $baseQuery->addShould(new \Elastica\Query\Term(array('id' => intval($q))));
         $baseQuery->addShould(new \Elastica\Query\Term(array('amount' => floatval($q))));
         $baseQuery->addShould(new \Elastica\Query\MatchPhrasePrefix('description', $q));
     }
     $query = \Elastica\Query::create($baseQuery);
     $count = $this->finder->createPaginatorAdapter($query, array('search_type' => 'count'))->getTotalHits();
     $query->addSort(array('id' => array('order' => 'asc')));
     $query->setSize($count);
     return $this->find($query);
 }
 public function AetCommunicationSearch($searchText)
 {
     //$finder = $this->container->get('fos_elastica.finder.aetsite.aetusers');
     $baseQuery = new \Elastica\Query();
     $boolQuery = new \Elastica\Query\Bool();
     /*
             if ((strlen($searchText)==4) && ctype_digit($searchText)) {
                 // Your Convert logic
     
                 $boolFilter = new \Elastica\Filter\Bool();
     
                 $from = new \DateTime('01/01/'.$searchText);
                 $to = new \DateTime('12/31/'.$searchText);
                 $boolFilter->addMust(new \Elastica\Filter\Range('promotion',
                     array(
                         'gte' => \Elastica\Util::convertDate($from->getTimestamp()),
                         'lte' => \Elastica\Util::convertDate($to->getTimestamp())
                     )
                 ));
     
                 $baseQuery->setPostFilter($boolFilter);
             }
             else{*/
     $fieldQuery = new \Elastica\Query\Match();
     $fieldQuery->setFieldQuery('title', $searchText);
     //$fieldQuery->setFieldParam('title', 'analyzer', 'custom_search_analyzer');
     $boolQuery->addShould($fieldQuery);
     $field1Query = new \Elastica\Query\Match();
     $field1Query->setFieldQuery('shortDesc', $searchText);
     $boolQuery->addShould($field1Query);
     $field1Query = new \Elastica\Query\Match();
     $field1Query->setFieldQuery('body', $searchText);
     $boolQuery->addShould($field1Query);
     $baseQuery->setQuery($boolQuery);
     //}
     // Option 1. Returns all users who have example.net in any of their mapped fields
     return $this->find($baseQuery);
 }
 /**
  *
  * @Route("", name="centrale_lille_search")
  */
 public function searchAction()
 {
     $jsonContentUser = '';
     $jsonContentMachine = '';
     $jsonContentProjet = '';
     $jsonContentSkills = '';
     $jsonTotal = '';
     $datauser = [];
     $dataprojet = [];
     $dataskills = [];
     $datamachine = [];
     $search = $this->get('request')->query->get('searchForm');
     if (is_null($search)) {
         $result_machine = [];
         $result_user = [];
         $result_skills = [];
         $result_projet = [];
     } else {
         //User Json
         $queryall = new \Elastica\Query\MatchAll();
         $typeUser = $this->get('fos_elastica.index.fablab.User');
         $result_alluser = $typeUser->search($queryall)->getResults();
         foreach ($result_alluser as $result) {
             $source = $result->getSource();
             $datauser[] = array('name' => $source['username'], 'link' => 'userId');
         }
         $jsonContentUser = new JsonResponse($datauser, 200, array('Cache-Control' => 'no-cache'));
         //Project Json
         $queryall = new \Elastica\Query\MatchAll();
         $typeProjet = $this->get('fos_elastica.index.fablab.Projet');
         $result_allprojet = $typeProjet->search($queryall)->getResults();
         foreach ($result_allprojet as $result) {
             $source = $result->getSource();
             $dataprojet[] = array('name' => $source['name'], 'link' => 'projectId');
         }
         $jsonContentProjet = new JsonResponse($dataprojet, 200, array('Cache-Control' => 'no-cache'));
         //Skills Json
         $queryall = new \Elastica\Query\MatchAll();
         $typeSkills = $this->get('fos_elastica.index.fablab.Competence');
         $result_allskills = $typeSkills->search($queryall)->getResults();
         foreach ($result_allskills as $result) {
             $source = $result->getSource();
             $dataskills[] = array('name' => $source['name'], 'link' => 'skillsId');
         }
         $jsonContentSkills = new JsonResponse($dataskills, 200, array('Cache-Control' => 'no-cache'));
         //Machine Json
         $queryall = new \Elastica\Query\MatchAll();
         $typeMachine = $this->get('fos_elastica.index.fablab.Machine');
         $result_allmachine = $typeMachine->search($queryall)->getResults();
         foreach ($result_allmachine as $result) {
             $source = $result->getSource();
             $type = $result->getType();
             $datamachine[] = array('name' => $source['name'], 'link' => 'machineId');
         }
         $jsonContentMachine = new JsonResponse($datamachine, 200, array('Cache-Control' => 'no-cache'));
         $jsonContentMachine = '"machine": ' . substr($jsonContentMachine, 83);
         $jsonContentUser = '******' . substr($jsonContentUser, 83);
         $jsonContentSkills = '"competence": ' . substr($jsonContentSkills, 83);
         $jsonContentProjet = '"projet": ' . substr($jsonContentProjet, 83);
         $jsonTotal = '{' . $jsonContentUser . ',' . $jsonContentMachine . ',' . $jsonContentProjet . ',' . $jsonContentSkills . '}';
         //Recherche User
         $typeUser = $this->get('fos_elastica.index.fablab.User');
         $query_part_user = new \Elastica\Query\BoolQuery();
         $fieldQuery = new \Elastica\Query\Match();
         $fieldQuery2 = new \Elastica\Query\Match();
         $fieldQuery9 = new \Elastica\Query\Match();
         $fieldQuery10 = new \Elastica\Query\Match();
         $fieldQuery->setFieldQuery('email', $search);
         $fieldQuery->setFieldFuzziness('email', 0.2);
         $query_part_user->addShould($fieldQuery);
         $fieldQuery9->setFieldQuery('firstname', $search);
         $fieldQuery9->setFieldFuzziness('firstname', 0.2);
         $query_part_user->addShould($fieldQuery9);
         $fieldQuery10->setFieldQuery('lastname', $search);
         $fieldQuery10->setFieldFuzziness('lastname', 0.2);
         $query_part_user->addShould($fieldQuery10);
         $fieldQuery2->setFieldQuery('username', $search);
         $fieldQuery2->setFieldFuzziness('username', 0.2);
         $query_part_user->addShould($fieldQuery2);
         $filters = new \Elastica\Filter\Bool();
         $query_user = new \Elastica\Query\Filtered($query_part_user, $filters);
         $result_user = $typeUser->search($query_user);
         //Recherche Machine
         $typeMachine = $this->get('fos_elastica.index.fablab.Machine');
         $query_part_machine = new \Elastica\Query\Bool();
         $fieldQuery3 = new \Elastica\Query\Match();
         $fieldQuery4 = new \Elastica\Query\Match();
         $fieldQuery3->setFieldQuery('name', $search);
         $fieldQuery3->setFieldFuzziness('name', 0.2);
         $fieldQuery3->setFieldMinimumShouldMatch('name', '80%');
         $query_part_machine->addShould($fieldQuery3);
         $fieldQuery4->setFieldQuery('description', $search);
         $fieldQuery4->setFieldFuzziness('description', 2);
         $fieldQuery4->setFieldMinimumShouldMatch('description', '100%');
         $query_part_machine->addShould($fieldQuery4);
         $filters = new \Elastica\Filter\Bool();
         $query_machine = new \Elastica\Query\Filtered($query_part_machine, $filters);
         $result_machine = $typeMachine->search($query_machine);
         //Recherche Skills
         $typeSkills = $this->get('fos_elastica.index.fablab.Competence');
         $query_part_skills = new \Elastica\Query\Bool();
         $fieldQuery5 = new \Elastica\Query\Match();
         $fieldQuery5->setFieldQuery('name', $search);
         $fieldQuery5->setFieldFuzziness('name', 2);
         $fieldQuery5->setFieldMinimumShouldMatch('name', '40%');
         $query_part_skills->addShould($fieldQuery5);
         $filters = new \Elastica\Filter\Bool();
         $query_skills = new \Elastica\Query\Filtered($query_part_skills, $filters);
         $result_skills = $typeSkills->search($query_skills);
         //Recherche projet
         $typeProjet = $this->get('fos_elastica.index.fablab.Projet');
         $query_part_projet = new \Elastica\Query\Bool();
         $fieldQuery6 = new \Elastica\Query\Match();
         $fieldQuery7 = new \Elastica\Query\Match();
         $fieldQuery6->setFieldQuery('name', $search);
         $fieldQuery6->setFieldFuzziness('name', 0.2);
         $fieldQuery6->setFieldMinimumShouldMatch('name', '80%');
         $query_part_projet->addShould($fieldQuery6);
         $fieldQuery7->setFieldQuery('summary', $search);
         $fieldQuery7->setFieldFuzziness('summary', 2);
         $fieldQuery7->setFieldMinimumShouldMatch('summary', '100%');
         $query_part_projet->addShould($fieldQuery7);
         $filters = new \Elastica\Filter\Bool();
         $query_projet = new \Elastica\Query\Filtered($query_part_projet, $filters);
         $result_projet = $typeProjet->search($query_projet);
         //
         $encoder = array(new JsonEncoder());
         $normalizer = array(new ObjectNormalizer());
         $serializer = new Serializer($normalizer, $encoder);
     }
     return $this->render('CentraleLilleSearchBundle:Default:search.html.twig', array('result_user' => $result_user, 'result_machine' => $result_machine, 'result_competence' => $result_skills, 'result_project' => $result_projet, 'search' => $search, 'userjson' => $jsonContentUser, 'machinejson' => $jsonContentMachine, 'jsonTotal' => $jsonTotal));
 }
 private function configureHighlightingForSource(&$config, $highlightSource)
 {
     global $wgCirrusSearchRegexMaxDeterminizedStates;
     $patterns = array();
     $locale = null;
     $caseInsensitive = false;
     foreach ($highlightSource as $part) {
         if (isset($part['pattern'])) {
             $patterns[] = $part['pattern'];
             $locale = $part['locale'];
             $caseInsensitive |= $part['insensitive'];
         }
     }
     if (count($patterns)) {
         $options = array('regex' => $patterns, 'locale' => $locale, 'regex_flavor' => 'lucene', 'skip_query' => true, 'regex_case_insensitive' => (bool) $caseInsensitive, 'max_determinized_states' => $wgCirrusSearchRegexMaxDeterminizedStates);
         $config['fields']['source_text.plain']['options'] = array_merge($config['fields']['source_text.plain']['options'], $options);
         return;
     }
     $queryStrings = array();
     foreach ($highlightSource as $part) {
         if (isset($part['query'])) {
             $queryStrings[] = $part['query'];
         }
     }
     if (count($queryStrings)) {
         $bool = new \Elastica\Query\Bool();
         foreach ($queryStrings as $queryString) {
             $bool->addShould($queryString);
         }
         $config['fields']['source_text.plain']['highlight_query'] = $bool->toArray();
     }
 }
Example #9
0
 public function search($category, PlaceSearch $placeSearch)
 {
     // we create a query to return all the articles
     // but if the criteria title is specified, we use it
     $boolQuery = new \Elastica\Query\Bool();
     /*Fetch only VALIDATED place*/
     $queryStatus = new \Elastica\Query\Match();
     $queryStatus->setFieldQuery('place.status', StatusType::VALIDATED);
     $boolQuery->addMust($queryStatus);
     if ($category !== null) {
         $queryCategory = new \Elastica\Query\Match();
         $queryCategory->setFieldQuery('place.categories.slug', $category);
         $boolQuery->addMust($queryCategory);
     }
     if ($placeSearch->getBirthdayDiscount() != null && $placeSearch->getBirthdayDiscount() > 0) {
         $queryRange = new \Elastica\Query\Range();
         $queryRange->setParam('place.birthdayDiscount', ['gte' => 1]);
         $boolQuery->addMust($queryRange);
     }
     if (($placeSearch->getName() != null || $placeSearch->getCategories() != null) && $placeSearch != null) {
         if ($placeSearch->getName() != null) {
             $query = new \Elastica\Query\Match();
             $query->setFieldQuery('place.name', $placeSearch->getName());
             $query->setFieldFuzziness('place.name', 1);
             $query->setFieldMinimumShouldMatch('place.name', '10%');
             $boolQuery->addMust($query);
         }
         if ($placeSearch->getCategories() != null) {
             foreach ($placeSearch->getCategories() as $cat) {
                 $categories[] = $cat->getName();
             }
             $queryCategories = new \Elastica\Query\Terms();
             $queryCategories->setTerms('place.categories', $categories);
             $boolQuery->addShould($queryCategories);
         }
     } else {
         $query = new \Elastica\Query\MatchAll();
     }
     $baseQuery = $boolQuery;
     // then we create filters depending on the chosen criterias
     $boolFilter = new \Elastica\Filter\Bool();
     $active = new \Elastica\Filter\Term(['membershipSubscriptions.statusSubscription' => MembershipStatusType::ACTIVE]);
     $boolFilter->addMust($active);
     /*
         Dates filter
         We add this filter only the getIspublished filter is not at "false"
     */
     //        if("false" != $articleSearch->getIsPublished()
     //           && null !== $articleSearch->getDateFrom()
     //           && null !== $articleSearch->getDateTo())
     //        {
     //            $boolFilter->addMust(new \Elastica\Filter\Range('publishedAt',
     //                array(
     //                    'gte' => \Elastica\Util::convertDate($articleSearch->getDateFrom()->getTimestamp()),
     //                    'lte' => \Elastica\Util::convertDate($articleSearch->getDateTo()->getTimestamp())
     //                )
     //            ));
     //        }
     $boolQuery->addMust(new \Elastica\Query\Range('businessHours.startsAt', array('lte' => 'now')));
     //        $boolQuery->addMust(new \Elastica\Query\Range('businessHours.startsAt',
     //                array(
     //                    //'gte' => \Elastica\Util::convertDate($articleSearch->getDateFrom()->getTimestamp()),
     //                    'lte' => 'now'
     //                ))
     //        );
     //
     // Published or not filter
     if ($placeSearch->getIs24h() !== null && $placeSearch->getIs24h()) {
         //var_dump($placeSearch->getIs24h());die();
         $boolFilter->addMust(new \Elastica\Filter\Term(['is24h' => $placeSearch->getIs24h()]));
         //$boolFilter->addMust('is24h', $placeSearch->getIs24h());
     }
     if ($placeSearch->getIsWifi() !== null && $placeSearch->getIsWifi()) {
         $boolFilter->addMust(new \Elastica\Filter\Term(['isWifi' => $placeSearch->getIsWifi()]));
     }
     if ($placeSearch->getIsDelivery() !== null && $placeSearch->getIsDelivery()) {
         $boolFilter->addMust(new \Elastica\Filter\Term(['isDelivery' => $placeSearch->getIsDelivery()]));
     }
     //$boolFilter->addMust($active);
     //        $boolFilter->addMust(
     //            new \Elastica\Filter\Term(['place.membershipSubscriptions.statusSubscription' => MembershipStatusType::ACTIVE])
     //        );
     //var_dump($boolFilter);die();
     //new \Elastica\Query\
     $filtered = new \Elastica\Query\Filtered($baseQuery, $boolFilter);
     $query = \Elastica\Query::create($filtered);
     $query->addSort(array('place.membershipSubscriptions.membership.score' => array('order' => 'asc')));
     //$query->addSort(array('rating' => array('order' => 'desc')));
     var_dump(json_encode($query->getQuery()));
     die;
     return $this->find($query);
     //$qSort = \Elastica\Query::create($filtered);
     //$query = new \Elastica\Query();
     //$query->setQuery($filtered);
     //$query->setQuery($qSort);
     //$query->setQuery($fnScoreQuery);
     //$fnScoreQuery->setQuery($filtered);
     //$qSort->setQuery($filtered);
     //return $this->find($query);
 }
Example #10
0
 /**
  * @param string $q
  * @return \Elastica\Query\AbstractQuery
  */
 protected function _getBaseQuery($q)
 {
     if (empty($q)) {
         $baseQuery = new \Elastica\Query\MatchAll();
     } else {
         $q = $this->_helper->_searchQuery($q);
         $baseQuery = new \Elastica\Query\Bool();
         if ($this->isFuzzyQueryEnabled()) {
             $fuzzy = new \Elastica\Query\FuzzyLikeThis();
             $fuzzy->addFields($this->_getSearchFields(true, $q))->setLikeText($q)->setMinSimilarity($this->getFuzzyMinSimilarity())->setPrefixLength($this->getFuzzyPrefixLength())->setMaxQueryTerms($this->getFuzzyMaxQueryTerms())->setBoost($this->getFuzzyQueryBoost());
             $baseQuery->addShould($fuzzy);
         }
         $queryString = new \Elastica\Query\QueryString($q);
         $queryString->setFields($this->_getSearchFields(true, $q));
         $queryString->setDefaultOperator($this->getQueryOperator());
         $queryString->setBoost('2');
         $baseQuery->addShould($queryString);
     }
     return $baseQuery;
 }
 protected function parseQueryString($queryString, array $opts)
 {
     $fields = $highlights = array();
     $terms = preg_split('/\\s+/', $queryString);
     $match = $opts['match'];
     $case = $opts['case'];
     // Map each word in the query string with its corresponding field
     foreach ($terms as $term) {
         $prefix = strstr($term, '*', true);
         if ($prefix) {
             // For wildcard search
             $fields['content.prefix_complete'][] = $prefix;
         } elseif ($case === '1') {
             // For case sensitive search
             $fields['content.case_sensitive'][] = $term;
         } else {
             $fields['content'][] = $term;
         }
     }
     // Allow searching either by message content or message id (page name
     // without language subpage) with exact match only.
     $searchQuery = new \Elastica\Query\Bool();
     foreach ($fields as $analyzer => $words) {
         foreach ($words as $word) {
             $boolQuery = new \Elastica\Query\Bool();
             $contentQuery = new \Elastica\Query\Match();
             $contentQuery->setFieldQuery($analyzer, $word);
             $boolQuery->addShould($contentQuery);
             $messageQuery = new \Elastica\Query\Term();
             $messageQuery->setTerm('localid', $word);
             $boolQuery->addShould($messageQuery);
             if ($match === 'all') {
                 $searchQuery->addMust($boolQuery);
             } else {
                 $searchQuery->addShould($boolQuery);
             }
             // Fields for highlighting
             $highlights[$analyzer] = array('number_of_fragments' => 0);
             // Allow searching by exact message title (page name with
             // language subpage).
             $title = Title::newFromText($word);
             if (!$title) {
                 continue;
             }
             $handle = new MessageHandle($title);
             if ($handle->isValid() && $handle->getCode() !== '') {
                 $localid = $handle->getTitleForBase()->getPrefixedText();
                 $boolQuery = new \Elastica\Query\Bool();
                 $messageId = new \Elastica\Query\Term();
                 $messageId->setTerm('localid', $localid);
                 $boolQuery->addMust($messageId);
                 $searchQuery->addShould($boolQuery);
             }
         }
     }
     return array($searchQuery, $highlights);
 }