Smile\ElasticsuiteThesaurus\Plugin\QueryRewrite::aroundCreate PHP Method

aroundCreate() public method

Rewrite the query.
public aroundCreate ( QueryBuilder $subject, Closure $proceed, Smile\ElasticsuiteCore\Api\Search\Request\ContainerConfigurationInterface $containerConfig, string $queryText, string $spellingType, float $boost = 1 ) : Smile\ElasticsuiteCore\Search\Request\QueryInterface
$subject Smile\ElasticsuiteCore\Search\Request\Query\Fulltext\QueryBuilder Original query builder.
$proceed Closure Original create func.
$containerConfig Smile\ElasticsuiteCore\Api\Search\Request\ContainerConfigurationInterface Search request container config.
$queryText string Current query text.
$spellingType string Spelling type of the query.
$boost float Original query boost.
return Smile\ElasticsuiteCore\Search\Request\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];
    }