Changeset 82957 in spip-zone


Ignore:
Timestamp:
Jun 11, 2014, 11:07:02 AM (7 years ago)
Author:
cedric@…
Message:

bugfix sur le scoring fulltext :

  • la liste des champs=>poids n'était pas prise en compte par la faute d'un mauvais nommage de variable (utilisation sur l'index titre de fulltext)

Amelioration du scoring :

  • le score calculé par champs/poids classique SPIP est plus précis car compte les occurences dans un champs, on peut donc le mixer avec le score fulltext pour améliorer les résultats (mais plus couteux en terme de calcul) : avec

define('_FULLTEXT_FIELD_SCORE',true) les 2 scores sont ajoutés

Location:
_plugins_/fulltext
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/fulltext/inc/recherche_to_array.php

    r82954 r82957  
    5555        list($methode, $q, $preg) = expression_recherche($recherche, $options);
    5656
    57         $l = liste_des_champs();
    58         $champs = $l[$table];
     57        $liste = liste_des_champs();
     58        $champs = $liste[$table];
    5959
    6060        $jointures = $options['jointures']
     
    196196
    197197                // preparer la requete
    198                 $requete['SELECT'] = array(
    199                         "t.$_id_table"
    200                         ,$score
    201                 );
     198                $requete['SELECT'][] = $score;
    202199
    203200                // popularite ?
     
    245242                        $r[$id]['score'] = $pts;
    246243
    247                 } ELSE
     244                }
    248245                // fin FULLTEXT
    249246
    250                 if ($options['toutvoir']
    251                 OR autoriser('voir', $table, $id)) {
    252                         // indiquer les champs concernes
    253                         $champs_vus = array();
    254                         $score = 0;
    255                         $matches = array();
    256 
    257                         $vu = false;
    258                         foreach ($champs as $champ => $poids) {
    259                                 $champ = explode('.',$champ);
    260                                 $champ = end($champ);
    261                                 if ($n =
    262                                         ($options['score'] || $options['matches'])
    263                                         ? preg_match_all($preg, translitteration_rapide($t[$champ]), $regs, PREG_SET_ORDER)
    264                                         : preg_match($preg, translitteration_rapide($t[$champ]))
    265                                 ) {
    266                                         $vu = true;
    267 
    268                                         if ($options['champs'])
    269                                                 $champs_vus[$champ] = $t[$champ];
    270                                         if ($options['score'])
    271                                                 $score += $n * $poids;
    272                                         if ($options['matches'])
    273                                                 $matches[$champ] = $regs;
    274 
    275                                         if (!$options['champs']
    276                                         AND !$options['score']
    277                                         AND !$options['matches'])
    278                                                 break;
     247
     248                if (!$fulltext OR (defined('_FULLTEXT_FIELD_SCORE') AND _FULLTEXT_FIELD_SCORE)) {
     249                        if ($options['toutvoir']
     250                        OR autoriser('voir', $table, $id)) {
     251                                // indiquer les champs concernes
     252                                $champs_vus = array();
     253                                $score = 0;
     254                                $matches = array();
     255
     256                                $vu = false;
     257                                foreach ($champs as $champ => $poids) {
     258                                        $champ = explode('.',$champ);
     259                                        $champ = end($champ);
     260                                        if ($n =
     261                                                ($options['score'] || $options['matches'])
     262                                                ? preg_match_all($preg, translitteration_rapide($t[$champ]), $regs, PREG_SET_ORDER)
     263                                                : preg_match($preg, translitteration_rapide($t[$champ]))
     264                                        ) {
     265                                                $vu = true;
     266
     267                                                if ($options['champs'])
     268                                                        $champs_vus[$champ] = $t[$champ];
     269                                                if ($options['score'])
     270                                                        $score += $n * $poids;
     271                                                if ($options['matches'])
     272                                                        $matches[$champ] = $regs;
     273
     274                                                if (!$options['champs']
     275                                                AND !$options['score']
     276                                                AND !$options['matches'])
     277                                                        break;
     278                                        }
    279279                                }
    280                         }
    281 
    282                         if ($vu) {
    283                                 $r[$id] = array();
    284                                 if ($champs_vus)
    285                                         $r[$id]['champs'] = $champs_vus;
    286                                 if ($score)
    287                                         $r[$id]['score'] = $score;
    288                                 if ($matches)
    289                                         $r[$id]['matches'] = $matches;
     280
     281                                if ($vu) {
     282                                        $r[$id] = array();
     283                                        if ($champs_vus)
     284                                                $r[$id]['champs'] = $champs_vus;
     285                                        if ($score)
     286                                                $r[$id]['score'] = ($fulltext?$r[$id]['score']:0)+$score;
     287                                        if ($matches)
     288                                                $r[$id]['matches'] = $matches;
     289                                }
    290290                        }
    291291                }
  • _plugins_/fulltext/paquet.xml

    r82954 r82957  
    22        prefix="fulltext"
    33        categorie="navigation"
    4         version="0.8.0"
     4        version="0.8.1"
    55        etat="test"
    66        compatibilite="[2.0.0;3.0.*]"
  • _plugins_/fulltext/plugin.xml

    r82954 r82957  
    88        </slogan>
    99        <auteur>Fil, Gael Chareyre</auteur>
    10         <version>0.8.0</version>
     10        <version>0.8.1</version>
    1111        <version_base>0.2</version_base>
    1212        <etat>test</etat>
Note: See TracChangeset for help on using the changeset viewer.