Je vois qu'il y a du monde même le dimanche ;-)

Je suis sur la refonte de la recherche titre. Pour 
l'instant, je bosse sur une fonction 'test_title_query()' 
dans misc.inc.php. Normalement, ça vient remplacer 
analyze_title_query().

Ca commence comme ça (le reste est commité, mais pas 
utilisé encore) :

function test_title_query($query, $operator=TRUE, 
$force_regexp=FALSE)
{
    // fonction d'analyse d'une recherche sur titre
    // la fonction retourne un tableau :

    $query_result = array(  'type' => 0,
                            'restr' => '',
                            'order' => '');
    // $query_result['type'] = type de la requête :
    // 0 : rien (problème) 1: match/against 2: regexp
    // $query_result['restr'] = critères de restriction
    // $query_result['order'] = critères de tri

    // si operator TRUE La recherche est booléenne AND
    // si operator FALSE La recherche est booléenne OR
    // si force_regexp: la rech. est forcée en mode regexp
...

Si je cherche 'mouvement libération femme' avec recherche 
regexp forcée, j'obtiens ce restricteur :

WHERE (index_tit1 REGEXP 'mouvement' OR index_tit2 
REGEXP 'mouvement' OR index_tit3 REGEXP 'mouvement' OR 
index_tit4 REGEXP 'mouvement' OR index_serie 
REGEXP 'mouvement') AND (index_tit1 REGEXP 'liberation' OR 
index_tit2 REGEXP 'liberation' OR index_tit3 
REGEXP 'liberation' OR index_tit4 REGEXP 'liberation' OR 
index_serie REGEXP 'liberation') AND (index_tit1 
REGEXP 'femme OR index_tit2 REGEXP 'femme' OR index_tit3 
REGEXP 'femme' OR index_tit4 REGEXP 'femme' OR index_serie 
REGEXP 'femme')

Ca me paraît OK sur la forme, mais question utilisation de 
ressources ça te dit quoi ? (pas un peu lourd ?).

J'ai une autre soluce sous le coude :

WHERE index_tit1 REGEXP 'mouvement|liberation|femme' OR 
index_tit2 
REGEXP 'mouvement|liberation|femme' OR index_tit3 
REGEXP 'mouvement|liberation|femme' OR 
index_tit4 REGEXP 'mouvement|liberation|femme' OR 
index_serie 
REGEXP 'mouvement|liberation|femme'

qui me semble moins gourmande, mais je tiens à appliquer le 
booléen fourni en param même si ça switche sur REGEXP.

Si je ne force pas la REGEXP, j'obtiens cela (beaucoup plus 
civilisé...) :

WHERE MATCH (index_tit1,index_tit2,index_tit3, index_tit4, 
index_serie) AGAINST ('mouvement') AND MATCH 
(index_tit1,index_tit2,index_tit3,index_tit4, index_serie) 
AGAINST ('liberation') AND MATCH 
(index_tit1,index_tit2,index_tit3,index_tit4, index_serie) 
AGAINST ('femme')

Une fois que j'ai fini le restricteur, reste le problème de 
la création d'un indice de confiance pour les REGEXP.

apparemment, champ REGEXP 'montruc' me retourne 0 ou 1, 
donc si je construit mon indice comme ça :

SELECT stuff, champ1 REGEXP 'truc' + champ2 REGEXP 'truc' 
+ ... AS indice

j'obtiens une approximation d'un simili indice ?

(je m'occuperais de la mise à l'echelle pour la mini-barre 
sur le moment de sa génération...)

A+

-- 
François Lemarchand
homepage : http://balno.free.fr/
PhpMyBibli : http://phpmybibli.sourceforge.net

Liste de diffusion phpmybibli.devel
Pour se désinscrire : mailto:[EMAIL PROTECTED]

Répondre à