Smile\ElasticsuiteThesaurus\Model\Index::combineSynonyms PHP Метод

combineSynonyms() приватный Метод

Combine analysis result to provides all possible synonyms substitution comination.
private combineSynonyms ( string $queryText, array $synonymByPositions, integer $substitutions, integer $offset ) : array
$queryText string Original query text
$synonymByPositions array Synonyms array by positions.
$substitutions integer Number of substitutions in the current query.
$offset integer Offset of previous substitutions.
Результат array
    private function combineSynonyms($queryText, $synonymByPositions, $substitutions = 0, $offset = 0)
    {
        $combinations = [];
        if (!empty($synonymByPositions)) {
            $currentPositionSynonyms = current($synonymByPositions);
            $remainingSynonyms = array_slice($synonymByPositions, 1);
            foreach ($currentPositionSynonyms as $synonym) {
                $startOffset = $synonym['start_offset'] + $offset;
                $length = $synonym['end_offset'] - $synonym['start_offset'];
                $rewrittenQueryText = substr_replace($queryText, $synonym['token'], $startOffset, $length);
                $newOffset = strlen($rewrittenQueryText) - strlen($queryText) + $offset;
                $combinations[$rewrittenQueryText] = $substitutions + 1;
                if (!empty($remainingSynonyms)) {
                    $combinations = array_merge($combinations, $this->combineSynonyms($rewrittenQueryText, $remainingSynonyms, $substitutions + 1, $newOffset));
                }
            }
            if (!empty($remainingSynonyms)) {
                $combinations = array_merge($combinations, $this->combineSynonyms($queryText, $remainingSynonyms, $substitutions, $offset));
            }
        }
        return $combinations;
    }