protected function getResultScore($result)
    {
        $output = [];

        $corpus = $this->buildResultIndex($result);
        $count = count($corpus['count']);

        // This block iterates the search query words and checks both their
        // existence and frequency in the index.
        //
        // The score is passed through log(x, 2) to reduce the smooth the difference.
        //
        foreach ($this->searchWords as $word) {
            $word = mb_strtolower($word);
            if (isset($corpus['dictionary'][$word])) {
                $entry = $corpus['dictionary'][$word];

                foreach ($entry['postings'] as $field => $posting) {
                    //get term frequency–inverse document frequency
                    $score = $posting['frequency'] * log($count + 1 / $entry['frequency'] + 1, 2);

                    if (isset($output[$field])) {
                        $output[$field] += $score;
                    } else {
                        $output[$field] = $score;
                    }
                }
            }
        }

        // length normalise, we do this to stop smaller amounts of text having
        // a disproportionate effect on the score.
        foreach ($output as $field => $score) {
            $output[$field] = $score / $corpus['count'][$field];
        }

        // Finally this weights by using the field specific weighting value that
        // is set inside `contenttypes.yml` This uses a weighting factor from 0 to
        // 100 that alters the score accordingly.
        $weights = $this->getContentFields();
        foreach ($output as $field => &$score) {
            if (isset($weights[$field]['weight'])) {
                $multiplier = $weights[$field]['weight'] / 100;

                if ($multiplier > 0) {
                    $score *= $multiplier;
                }
            }
        }

        return array_sum($output);
    }
protected function getResultScore($result)
    {
        $output = [];

        $corpus = $this->buildResultIndex($result);
        $count = count($corpus['count']);

        // This block iterates the search query words and checks both their
        // existence and frequency in the index.
        //
        // The score is passed through log(x, 2) to reduce the smooth the difference.
        //
        foreach ($this->searchWords as $word) {
            $word = mb_strtolower($word);
            if (isset($corpus['dictionary'][$word])) {
                $entry = $corpus['dictionary'][$word];

                foreach ($entry['postings'] as $field => $posting) {
                    //get term frequency–inverse document frequency
                    $score = $posting['frequency'] * log($count + 1 / $entry['frequency'] + 1, 2);

                    if (isset($output[$field])) {
                        $output[$field] += $score;
                    } else {
                        $output[$field] = $score;
                    }
                }
            }
        }

        // length normalise, we do this to stop smaller amounts of text having
        // a disproportionate effect on the score.
        foreach ($output as $field => $score) {
            $output[$field] = $score / $corpus['count'][$field];
        }

        // Finally this weights by using the field specific weighting value that
        // is set inside `contenttypes.yml` This uses a weighting factor from 0 to
        // 100 that alters the score accordingly.
        $weights = $this->getContentFields();
        foreach ($output as $field => &$score) {
            if (isset($weights[$field]['weight'])) {
                $multiplier = $weights[$field]['weight'] / 100;

                if ($multiplier > 0) {
                    $score *= $multiplier;
                }
            }
        }

        return array_sum($output);
    }
protected function getResultScore ( $ result ) { $ output = [ ] ; $ corpus = $ this -> buildResultIndex ( $ result ) ; $ count = count ( $ corpus [ 'count' ] ) ; // This block iterates the search query words and checks both their // existence and frequency in the index. // // The score is passed through log(x, 2) to reduce the smooth the difference. // foreach ( $ this -> searchWords as $ word ) { $ word = mb_strtolower ( $ word ) ; if ( isset ( $ corpus [ 'dictionary' ] [ $ word ] ) ) { $ entry = $ corpus [ 'dictionary' ] [ $ word ] ; foreach ( $ entry [ 'postings' ] as $ field => $ posting ) { //get term frequency–inverse document frequency $ score = $ posting [ 'frequency' ] * log ( $ count + 1 / $ entry [ 'frequency' ] + 1 , 2 ) ; if ( isset ( $ output [ $ field ] ) ) { $ output [ $ field ] += $ score ; } else { $ output [ $ field ] = $ score ; } } } } // length normalise, we do this to stop smaller amounts of text having // a disproportionate effect on the score. foreach ( $ output as $ field => $ score ) { $ output [ $ field ] = $ score / $ corpus [ 'count' ] [ $ field ] ; } // Finally this weights by using the field specific weighting value that // is set inside `contenttypes.yml` This uses a weighting factor from 0 to // 100 that alters the score accordingly. $ weights = $ this -> getContentFields ( ) ; foreach ( $ output as $ field => & $ score ) { if ( isset ( $ weights [ $ field ] [ 'weight' ] ) ) { $ multiplier = $ weights [ $ field ] [ 'weight' ] / 100 ; if ( $ multiplier > 0 ) { $ score *= $ multiplier ; } } } return array_sum ( $ output ) ; }
This method uses the index built in the method above to do some quick
score calculations for each word of the query, versus each word of the
index dictionary.

@param object $result

@return float
This method uses the index built in the method above to do some quick score calculations for each word of the query versus each word of the index dictionary .