Smile\ElasticsuiteThesaurus\Model\Index::getQueryRewrites PHP Method

getQueryRewrites() public method

Provides weigthed rewrites for the query.
public getQueryRewrites ( Smile\ElasticsuiteCore\Api\Search\Request\ContainerConfigurationInterface $containerConfig, string $queryText ) : array
$containerConfig Smile\ElasticsuiteCore\Api\Search\Request\ContainerConfigurationInterface Search request container config.
$queryText string Fulltext query.
return array
    public function getQueryRewrites(ContainerConfigurationInterface $containerConfig, $queryText)
    {
        $cacheKey = $this->getCacheKey($containerConfig, $queryText);
        $cacheTags = $this->getCacheTags($containerConfig);
        $queryRewrites = $this->cacheHelper->loadCache($cacheKey);
        if ($queryRewrites === false) {
            $queryRewrites = $this->computeQueryRewrites($containerConfig, $queryText);
            $this->cacheHelper->saveCache($cacheKey, $queryRewrites, $cacheTags);
        }
        return $queryRewrites;
    }

Usage Example

Example #1
0
 /**
  * Rewrite the query.
  *
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  *
  * @param QueryBuilder                    $subject         Original query builder.
  * @param \Closure                        $proceed         Original create func.
  * @param ContainerConfigurationInterface $containerConfig Search request container config.
  * @param string                          $queryText       Current query text.
  * @param string                          $spellingType    Spelling type of the query.
  * @param float                           $boost           Original query boost.
  *
  * @return QueryInterface
  */
 public function aroundCreate(QueryBuilder $subject, \Closure $proceed, ContainerConfigurationInterface $containerConfig, $queryText, $spellingType, $boost = 1)
 {
     $storeId = $containerConfig->getStoreId();
     $requestName = $containerConfig->getName();
     $rewriteCacheKey = $requestName . '|' . $storeId . '|' . md5(json_encode($queryText));
     if (!isset($this->rewritesCache[$rewriteCacheKey])) {
         $query = $proceed($containerConfig, $queryText, $spellingType, $boost);
         $rewrites = [];
         if (!is_array($queryText)) {
             $queryText = [$queryText];
         }
         foreach ($queryText as $currentQueryText) {
             $rewrites = array_merge($rewrites, $this->index->getQueryRewrites($containerConfig, $currentQueryText));
         }
         if (!empty($rewrites)) {
             $synonymQueries = [$query];
             $synonymQueriesSpellcheck = SpellcheckerInterface::SPELLING_TYPE_EXACT;
             foreach ($rewrites as $rewrittenQuery => $weight) {
                 $synonymQueries[] = $proceed($containerConfig, $rewrittenQuery, $synonymQueriesSpellcheck, $weight);
             }
             $query = $this->queryFactory->create(QueryInterface::TYPE_BOOL, ['should' => $synonymQueries]);
         }
         $this->rewritesCache[$rewriteCacheKey] = $query;
     }
     return $this->rewritesCache[$rewriteCacheKey];
 }