src/AppBundle/Controller/SearchController.php line 12

Open in your IDE?
  1. <?php
  2. namespace AppBundle\Controller;
  3. use LuceneSearchBundle\Helper\HighlighterHelper;
  4. use LuceneSearchBundle\Controller\ListController;
  5. use Pimcore\Twig\Extension\Templating\Placeholder;
  6. use Symfony\Contracts\Translation\TranslatorInterface;
  7. class SearchController extends ListController {
  8.     public function getResultsAction(TranslatorInterface $translatorPlaceholder $placeholder)
  9.     {
  10.         $highlighterHelper = new HighlighterHelper();
  11.         $requestQuery $this->requestStack->getMasterRequest()->query;
  12.         try {
  13.             $query = new \Zend_Search_Lucene_Search_Query_Boolean();
  14.             $field $requestQuery->get('field');
  15.             if (!empty($field)) {
  16.                 \Zend_Search_Lucene::setDefaultSearchField($field);
  17.             }
  18.             $searchResults = [];
  19.             $validHits = [];
  20.             if (!empty($this->query)) {
  21.                 if ($this->fuzzySearchResults) {
  22.                     $this->query str_replace(' ''~ '$this->query);
  23.                     $this->query .= '~';
  24.                     \Zend_Search_Lucene_Search_Query_Fuzzy::setDefaultPrefixLength(3);
  25.                 }
  26.                 $userQuery \Zend_Search_Lucene_Search_QueryParser::parse($this->query'utf-8');
  27.                 $query->addSubquery($userQuerytrue);
  28.                 $this->addAdditionalSubQueries($query);
  29.                 $validHits $this->getValidHits($this->frontendIndex->find($query));
  30.                 $start $this->perPage * ($this->currentPage 1);
  31.                 $end $start + ($this->perPage 1);
  32.                 if ($end count($validHits) - 1) {
  33.                     $end count($validHits) - 1;
  34.                 }
  35.                 for ($i $start$i <= $end$i++) {
  36.                     /** @var \Zend_Search_Lucene_Search_QueryHit $hit */
  37.                     $hit $validHits[$i];
  38.                     /** @var \Zend_Search_Lucene_Document $doc */
  39.                     $doc $hit->getDocument();
  40.                     $availableFieldNames $doc->getFieldNames();
  41.                     $url in_array('url'$availableFieldNames) ? $doc->getField('url')->value null;
  42.                     $title in_array('title'$availableFieldNames) ? $doc->getField('title')->value null;
  43.                     $content in_array('content'$availableFieldNames) ? $doc->getField('content')->value null;
  44.                     $searchResult['boost'] = $doc->boost;
  45.                     $uppercaseSearch ucfirst($this->query);
  46.                     $searchResult['title'] = str_replace([$this->query$uppercaseSearch], ["<span class=\"highlight\">$this->query</span>""<span class=\"highlight\">$uppercaseSearch</span>"], $title);
  47.                     $searchResult['url'] = $url;
  48.                     $searchResult['summary'] = $highlighterHelper->getSummaryForUrl($content$this->untouchedQuery);
  49.                     if (in_array('h1'$availableFieldNames)) {
  50.                         $searchResult['h1'] = $doc->getField('h1')->value;
  51.                     }
  52.                     if (in_array('description'$availableFieldNames)) {
  53.                         $searchResult['description'] = $highlighterHelper->getSummaryForUrl($doc->getField('description')->value,
  54.                             $this->untouchedQuery);
  55.                     }
  56.                     if (in_array('imageTags'$availableFieldNames)) {
  57.                         $searchResult['imageTags'] = $doc->getField('imageTags')->value;
  58.                     }
  59.                     $searchResult['categories'] = [];
  60.                     if (in_array('categories'$availableFieldNames)) {
  61.                         $categories $doc->getField('categories')->value;
  62.                         if (!empty($categories)) {
  63.                             $searchResult['categories'] = $this->mapCategories($categories);
  64.                         }
  65.                     }
  66.                     $searchResults[] = $searchResult;
  67.                     unset($searchResult);
  68.                 }
  69.             }
  70.             $suggestions false;
  71.             if ($this->searchSuggestion && count($searchResults) === 0) {
  72.                 $suggestions $this->getFuzzySuggestions();
  73.             }
  74.             $currentPageResultStart $this->perPage * ($this->currentPage 1);
  75.             $currentPageResultEnd $currentPageResultStart $this->perPage;
  76.             if ($currentPageResultEnd count($validHits)) {
  77.                 $currentPageResultEnd count($validHits);
  78.             }
  79.             $pages 0;
  80.             if (count($validHits) > 0) {
  81.                 $pages ceil(count($validHits) / $this->perPage);
  82.             }
  83.             $viewParams = [
  84.                 'searchCurrentPage'            => $this->currentPage,
  85.                 'searchAllPages'               => $pages,
  86.                 'searchCategory'               => $this->queryCategories,
  87.                 'searchAvailableCategories'    => $this->categories,
  88.                 'searchSuggestions'            => $suggestions,
  89.                 'searchLanguage'               => $this->searchLanguage,
  90.                 'searchCountry'                => $this->searchCountry,
  91.                 'searchPerPage'                => $this->perPage,
  92.                 'searchTotalHits'              => count($validHits),
  93.                 'searchQuery'                  => $this->untouchedQuery,
  94.                 'searchHasResults'             => count($searchResults) > 0,
  95.                 'searchResults'                => $searchResults,
  96.                 'searchCurrentPageResultStart' => $currentPageResultStart 1,
  97.                 'searchCurrentPageResultEnd'   => $currentPageResultEnd
  98.             ];
  99.             if ($this->document && $viewParams['searchQuery']) {
  100.                 $translatedPageName "fulltext-seach.header.search-result";
  101.                 if ($translator->trans($translatedPageName) ) {
  102.                     $translatedPageName $translator->trans($translatedPageName);
  103.                 }
  104.                 $placeholder('addBreadcrumb')->append([
  105.                     'parentId' => $this->document->getId(),
  106.                     'id' => 'search-results',
  107.                     'label' => $translatedPageName,
  108.                     'titel' => $translatedPageName
  109.                 ]);
  110.             }
  111.         } catch (\Exception $e) {
  112.             $viewParams = [
  113.                 'error'        => true,
  114.                 'errorMessage' => $e->getMessage() . ' (' $e->getFile() . ' Line: ' $e->getLine() . ')',
  115.             ];
  116.         }
  117.         return $this->renderTemplate("@App/ObjectViews/search-results.html.twig"$viewParams);
  118.     }
  119. }