public function search()
 {
     //if search with OSS has not been activated yet in module configuration page OSS is not used
     $searchEnabled = OpensearchserverConfigQuery::read('enable_search');
     if (!$searchEnabled) {
         //display results
         return $this->render('search');
     }
     //get keywords
     $request = $this->getRequest();
     $keywords = $request->query->get('q', null);
     $sort = $request->query->get('order', null);
     $page = $request->query->get('page', 1);
     $limit = $request->query->get('limit', 8);
     $offset = $limit == 100000 ? 0 : ($page - 1) * $limit;
     //get locale
     $locale = $request->getSession()->getLang()->getLocale();
     //fix bug with FR locale?
     if ($locale == 'fr_FR') {
         $locale = array('fr_FR', 'fr_Fr');
         $lang = \OpenSearchServer\Request::LANG_FR;
     }
     if (!isset($lang)) {
         switch ($locale) {
             case 'en_EN':
             case 'en_US':
                 $lang = \OpenSearchServer\Request::LANG_EN;
                 break;
             case 'es_ES':
                 $lang = \OpenSearchServer\Request::LANG_ES;
                 break;
             case 'it_IT':
                 $lang = \OpenSearchServer\Request::LANG_IT;
                 break;
             case 'ru_RU':
                 $lang = \OpenSearchServer\Request::LANG_RU;
                 break;
             default:
                 $lang = \OpenSearchServer\Request::LANG_UNDEFINED;
                 break;
         }
     }
     $index = OpensearchserverConfigQuery::read('index_name');
     $queryTemplate = OpensearchserverConfigQuery::read('query_template');
     //create handler for requests
     $oss_api = \OpenSearchServerSearch\Helper\OpenSearchServerSearchHelper::getHandler();
     //create search request
     $request = new \OpenSearchServer\Search\Field\Search();
     $request->index($index)->template($queryTemplate)->start($offset)->rows($limit)->lang($lang)->filterField('locale', $locale, \OpenSearchServer\Request::OPERATOR_OR)->enableLog()->query($keywords);
     //handle sorting
     switch ($sort) {
         case 'alpha':
             $request->sort('titleSort', \OpenSearchServer\Search\Search::SORT_ASC);
             break;
         case 'alpha_reverse':
             $request->sort('titleSort', \OpenSearchServer\Search\Search::SORT_DESC);
             break;
         case 'min_price':
             $request->sort('price', \OpenSearchServer\Search\Search::SORT_ASC);
             break;
         case 'max_price':
             $request->sort('price', \OpenSearchServer\Search\Search::SORT_DESC);
             break;
     }
     //send query
     $response = $oss_api->submit($request);
     $ids = array();
     foreach ($response->getResults() as $result) {
         $ids[] = $result->getField('id');
     }
     //number of pages
     $numberOfPages = $limit > 0 ? round($response->getTotalNumberFound() / $limit) : 1;
     //display results
     return $this->render('oss_results', array('module_code' => 'OpenSearchServerSearch', 'keywords' => $keywords, 'total' => $response->getTotalNumberFound(), 'results' => $response->getResults(), 'ids' => implode(',', $ids), 'numberOfPages' => $numberOfPages));
 }
 public function deleteProduct(ProductEvent $event)
 {
     OpenSearchServerSearchHelper::deleteProduct($event->getProduct());
 }
 /**
  * Create an analyzer
  * @param string $index Name of the index to create
  */
 private function createAnalyzer($index, $analyzer)
 {
     //get handle to work with the API
     $oss_api = OpenSearchServerSearchHelper::getHandler();
     if (is_file($this->getBasePath() . '/Config/oss_analyzer_' . $analyzer . '.json') && is_readable($this->getBasePath() . '/Config/oss_analyzer_' . $analyzer . '.json')) {
         $request = new \OpenSearchServer\Analyzer\Create(null, file_get_contents($this->getBasePath() . '/Config/oss_analyzer_' . $analyzer . '.json'));
         $request->index($index)->name($analyzer);
         $response = $oss_api->submit($request);
         return $response->isSuccess();
     }
     return false;
 }
 public static function deleteProduct(Product $product)
 {
     /************************************
      * Get name of index and handler to work with OSS API
      ************************************/
     $index = OpensearchserverConfigQuery::read('index_name');
     $oss_api = OpenSearchServerSearchHelper::getHandler();
     //delete every versions of this product (all locales)
     $request = new \OpenSearchServer\Document\Delete();
     $request->index($index)->field('id')->value($product->getId());
     $response = $oss_api->submit($request);
     return $response->isSuccess();
 }